All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/5] Package docker + docker-registry
@ 2015-02-27 21:40 Amy Fong
  2015-02-27 21:40 ` [PATCH 1/5] Add golang-cross Amy Fong
                   ` (5 more replies)
  0 siblings, 6 replies; 9+ messages in thread
From: Amy Fong @ 2015-02-27 21:40 UTC (permalink / raw)
  To: meta-virtualization

This set of patches adds the packages docker, docker-registry
and required dependencies/rdependencies.

The following were added to my BBLAYERS on top
of a basic yocto/poky build to compile these packages:

  meta-virtualization \
  meta-cloud-services/meta-openstack \
  meta-openembedded/meta-oe \
  meta-openembedded/meta-networking \
  meta-openembedded/meta-python \
  meta-openembedded/meta-filesystems \




^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 1/5] Add golang-cross
  2015-02-27 21:40 [PATCH 0/5] Package docker + docker-registry Amy Fong
@ 2015-02-27 21:40 ` Amy Fong
  2015-02-27 21:41 ` [PATCH 3/5] Package docker-registry Amy Fong
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 9+ messages in thread
From: Amy Fong @ 2015-02-27 21:40 UTC (permalink / raw)
  To: meta-virtualization

From a3a4b6a7595215b69f6e7f30cd010ab19b1ab54c Mon Sep 17 00:00:00 2001
From: Amy Fong <amy.fong@windriver.com>
Date: Fri, 27 Feb 2015 15:58:44 -0500
Subject: [PATCH 1/5] Add golang-cross

This package is derived from meta-golang:
https://github.com/digitallumens/meta-golang.git
commit 3fa6c8af6b4762de2f4e6740e327a5a71c29e6e1

In the meta-golang version, golang depends on a gcc-cross that causes
conflicts with our toolchain. So the golang-cross recipe was extracted
and then the following changes were made to work in wrlinux:

- our TARGET_ARCH is x86-64, golang-cross wants amd64

- in the former recipe, compile fails because it can't find header files
  and libraries because --sysroot is dropped. So I redefined the target
  cc and target cxx as cc and cxx at the start of the compile rule since
  cc gets redefined in there somewhere.

Signed-off-by: Amy Fong <amy.fong@windriver.com>
---
 recipes-devtools/go/golang-1.3.inc      |  4 +++
 recipes-devtools/go/golang-cross.inc    | 56 +++++++++++++++++++++++++++++++++
 recipes-devtools/go/golang-cross_1.3.bb |  3 ++
 3 files changed, 63 insertions(+)
 create mode 100644 recipes-devtools/go/golang-1.3.inc
 create mode 100644 recipes-devtools/go/golang-cross.inc
 create mode 100644 recipes-devtools/go/golang-cross_1.3.bb

diff --git a/recipes-devtools/go/golang-1.3.inc b/recipes-devtools/go/golang-1.3.inc
new file mode 100644
index 0000000..5c507b4
--- /dev/null
+++ b/recipes-devtools/go/golang-1.3.inc
@@ -0,0 +1,4 @@
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=591778525c869cdde0ab5a1bf283cd81"
+SRC_URI[md5sum] = "4b66d7249554181c314f139ea78920b1"
+SRC_URI[sha256sum] = "eb983e6c5b2b9838f482c5442b1ac1856f610f2b21f3c123b3fedb48ffc35382"
diff --git a/recipes-devtools/go/golang-cross.inc b/recipes-devtools/go/golang-cross.inc
new file mode 100644
index 0000000..9330572
--- /dev/null
+++ b/recipes-devtools/go/golang-cross.inc
@@ -0,0 +1,56 @@
+DESCRIPTION = "Go Programming Language Cross Compiler."
+HOMEPAGE = "golang.org"
+# DEPENDS = "virtual/${TARGET_PREFIX}gcc libgcc"
+DEPENDS = "libgcc"
+PROVIDES = "virtual/${TARGET_PREFIX}golang"
+SRC_URI = "http://golang.org/dl/go${PV}.src.tar.gz"
+S="${WORKDIR}/go"
+
+do_compile () {
+	export CC_FOR_TARGET="${CC}"
+	export CXX_FOR_TARGET="${CXX}"
+	# the above should set the right sysroot option, else...:
+	# export CGO_CFLAGS="--sysroot=${STAGING_DIR_HOST}"
+	# export CGO_LDFLAGS="--sysroot=${STAGING_DIR_HOST}"
+
+	export CC="${BUILD_CC}"
+	export GOROOT_FINAL="${libdir}/go"
+	export GOARCH="${TARGET_ARCH}"
+
+	# supported amd64, 386, arm
+	if [ "${TARGET_ARCH}" = "x86_64" ]; then
+		export GOARCH="amd64"
+	fi
+
+	if [ "${TARGET_ARCH}" = "arm" ]
+	then
+		if [ `echo ${TUNE_PKGARCH} | cut -c 1-7` = "cortexa" ]
+		then
+			echo GOARM 7
+			export GOARM="7"
+		fi
+	fi
+	export GOOS="linux"
+	export GO_GCFLAGS=""
+	export GO_LDFLAGS=""
+	export GO_CCFLAGS=""
+	export CGO_ENABLED="1"
+	#export CC_FOR_TARGET="${TARGET_SYS}-gcc"
+	#export CXX_FOR_TARGET="${TARGET_SYS}-g++"
+	echo GOARCH ${GOARCH}
+	echo CC_FOR_TARGET ${CC_FOR_TARGET}
+
+	cd src
+	sh -x ./make.bash
+}
+
+do_install () {
+	# Install the executables into build system
+	mkdir -p ${D}${bindir}
+	cp -a bin/go ${D}${bindir}/
+	mkdir -p ${D}${libdir}/go
+	cp -a pkg ${D}${libdir}/go/
+	cp -a include ${D}${libdir}/go/
+	cp -a api ${D}${libdir}/go/
+	cp -a src ${D}${libdir}/go/
+}
diff --git a/recipes-devtools/go/golang-cross_1.3.bb b/recipes-devtools/go/golang-cross_1.3.bb
new file mode 100644
index 0000000..8813298
--- /dev/null
+++ b/recipes-devtools/go/golang-cross_1.3.bb
@@ -0,0 +1,3 @@
+inherit cross
+require golang-cross.inc
+require golang-${PV}.inc
-- 
2.1.4



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 3/5] Package docker-registry
  2015-02-27 21:40 [PATCH 0/5] Package docker + docker-registry Amy Fong
  2015-02-27 21:40 ` [PATCH 1/5] Add golang-cross Amy Fong
@ 2015-02-27 21:41 ` Amy Fong
  2015-02-27 21:41 ` [PATCH 4/5] Add cgroup-lite Amy Fong
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 9+ messages in thread
From: Amy Fong @ 2015-02-27 21:41 UTC (permalink / raw)
  To: meta-virtualization

From 8af720cf20eb69d0f70908923cb2a81a9a65e5a4 Mon Sep 17 00:00:00 2001
From: Amy Fong <amy.fong@windriver.com>
Date: Fri, 27 Feb 2015 15:59:25 -0500
Subject: [PATCH 3/5] Package docker-registry

Provides repositories of docker images

Signed-off-by: Amy Fong <amy.fong@windriver.com>
---
 .../docker-registry/docker-registry_git.bb         |  92 +++++++++
 .../files/change_sqlalchemy_rqt.patch              |  13 ++
 .../docker-registry/files/config.yml               | 228 +++++++++++++++++++++
 .../docker-registry/files/docker-registry.conf     |  19 ++
 .../docker-registry/files/docker-registry.service  |  15 ++
 5 files changed, 367 insertions(+)
 create mode 100644 recipes-containers/docker-registry/docker-registry_git.bb
 create mode 100644 recipes-containers/docker-registry/files/change_sqlalchemy_rqt.patch
 create mode 100644 recipes-containers/docker-registry/files/config.yml
 create mode 100644 recipes-containers/docker-registry/files/docker-registry.conf
 create mode 100644 recipes-containers/docker-registry/files/docker-registry.service

diff --git a/recipes-containers/docker-registry/docker-registry_git.bb b/recipes-containers/docker-registry/docker-registry_git.bb
new file mode 100644
index 0000000..8b42d79
--- /dev/null
+++ b/recipes-containers/docker-registry/docker-registry_git.bb
@@ -0,0 +1,92 @@
+HOMEPAGE = "https://github.com/docker/docker-registry"
+SUMMARY = "Registry server for Docker"
+DESCRIPTION = "\
+ This is the classic python docker-registry. \
+ . \
+ hosting/delivering of repositories and images \
+ "
+
+SRCREV = "fd8c0c114985547b69088e0f1526e58bfe2ff914"
+SRC_URI = "\
+	git://github.com/docker/docker-registry.git \
+	file://docker-registry.conf \
+	file://docker-registry.service \
+	file://config.yml \
+	file://change_sqlalchemy_rqt.patch \
+	"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=35e8e5305c1b7b4a5761f9de5d44e5f4"
+
+S = "${WORKDIR}/git"
+
+PV = "0.9.1+git${SRCREV}"
+
+RDEPENDS_${PN} += "\
+  docker \
+  gunicorn (= 19.1.1) \
+  python-pip \
+  python-distribute \
+  python-m2crypto (= 0.22.3) \
+  python-pyyaml (= 3.11) \
+  python-flask (= 0.10.1) \
+  python-gevent (= 1.0.1) \
+  python-requests (= 2.3.0) \
+  python-sqlalchemy (>= 0.9.4) \
+  python-blinker (= 1.3) \
+  python-backports-lzma (= 0.0.3) \
+  python-flask-cors (= 1.10.3) \
+  python-bugsnag (= 2.0.2) \
+  python-docker-registry-core (= 2.0.3) \
+  python-newrelic (= 2.22.0.19) \
+  python-itsdangerous (>= 0.21) \
+  python-jinja2 (>= 2.4) \
+  python-werkzeug (>= 0.7) \
+  python-simplejson (= 3.6.2) \
+  python-redis (= 2.10.3) \
+  python-boto (= 2.34.0) \
+  python-webob \
+  "
+# OFFICIAL REQ:
+# docker-registry-core>=2,<3
+# blinker==1.3
+# backports.lzma==0.0.3,!=0.0.4
+
+# Flask==0.10.1
+# gevent==1.0.1
+# gunicorn==19.1.1
+# PyYAML==3.11
+# requests==2.3.0
+# M2Crypto==0.22.3
+# sqlalchemy==0.9.4
+# setuptools==5.8
+# 
+# [bugsnag]
+# bugsnag>=2.0,<2.1
+# 
+# [cors]
+# Flask-cors>=1.8,<2.0
+# 
+# [newrelic]
+# newrelic>=2.22,<2.23
+
+
+inherit setuptools systemd
+
+SYSTEMD_PACKAGES = "${@base_contains('DISTRO_FEATURES','systemd','${PN}','',d)}"
+SYSTEMD_SERVICE_${PN} = "${@base_contains('DISTRO_FEATURES','systemd','docker-registry.service','',d)}"
+
+do_install_append() {
+	mkdir -p ${D}/etc/default/
+	cp ${WORKDIR}/docker-registry.conf ${D}/etc/default/docker-registry
+
+	if ${@base_contains('DISTRO_FEATURES','systemd','true','false',d)}; then
+		install -d ${D}${systemd_unitdir}/system
+		install -m 644 ${WORKDIR}/docker-registry.service ${D}/${systemd_unitdir}/system
+	fi
+	# based on config_mirror.yml - uses /var/docker-registry instead of /tmp for files
+	install ${WORKDIR}/config.yml ${D}/etc/docker-registry.yml
+	mkdir -p ${D}/var/docker-registry
+}
+
+FILES_${PN} += "/etc/default /var/docker-registry /etc/ /etc/default/volatiles"
diff --git a/recipes-containers/docker-registry/files/change_sqlalchemy_rqt.patch b/recipes-containers/docker-registry/files/change_sqlalchemy_rqt.patch
new file mode 100644
index 0000000..75cbd6d
--- /dev/null
+++ b/recipes-containers/docker-registry/files/change_sqlalchemy_rqt.patch
@@ -0,0 +1,13 @@
+---
+ requirements/main.txt |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/requirements/main.txt
++++ b/requirements/main.txt
+@@ -5,5 +5,5 @@
+ PyYAML==3.11
+ requests==2.3.0
+ M2Crypto==0.22.3
+-sqlalchemy==0.9.4
++sqlalchemy>=0.9.4
+ setuptools==5.8
diff --git a/recipes-containers/docker-registry/files/config.yml b/recipes-containers/docker-registry/files/config.yml
new file mode 100644
index 0000000..8b33766
--- /dev/null
+++ b/recipes-containers/docker-registry/files/config.yml
@@ -0,0 +1,228 @@
+# All other flavors inherit the `common' config snippet
+common: &common
+    issue: '"docker-registry server"'
+    # Default log level is info
+    loglevel: _env:LOGLEVEL:info
+    # Enable debugging (additional informations in the output of the _ping endpoint)
+    debug: _env:DEBUG:false
+    # By default, the registry acts standalone (eg: doesn't query the index)
+    standalone: _env:STANDALONE:true
+    # The default endpoint to use (if NOT standalone) is index.docker.io
+    index_endpoint: _env:INDEX_ENDPOINT:https://index.docker.io
+    # Storage redirect is disabled
+    storage_redirect: _env:STORAGE_REDIRECT
+    # Token auth is enabled (if NOT standalone)
+    disable_token_auth: _env:DISABLE_TOKEN_AUTH
+    # No priv key
+    privileged_key: _env:PRIVILEGED_KEY
+    # No search backend
+    search_backend: _env:SEARCH_BACKEND
+    # SQLite search backend
+    sqlalchemy_index_database: _env:SQLALCHEMY_INDEX_DATABASE:sqlite:////var/docker-registry/docker-registry.db
+
+    # Mirroring is not enabled
+    mirroring:
+        source: _env:MIRROR_SOURCE # https://registry-1.docker.io
+        source_index: _env:MIRROR_SOURCE_INDEX # https://index.docker.io
+        tags_cache_ttl: _env:MIRROR_TAGS_CACHE_TTL:172800 # seconds
+
+    cache:
+        host: _env:CACHE_REDIS_HOST
+        port: _env:CACHE_REDIS_PORT
+        db: _env:CACHE_REDIS_DB:0
+        password: _env:CACHE_REDIS_PASSWORD
+
+    # Enabling LRU cache for small files
+    # This speeds up read/write on small files
+    # when using a remote storage backend (like S3).
+    cache_lru:
+        host: _env:CACHE_LRU_REDIS_HOST
+        port: _env:CACHE_LRU_REDIS_PORT
+        db: _env:CACHE_LRU_REDIS_DB:0
+        password: _env:CACHE_LRU_REDIS_PASSWORD
+
+    # Enabling these options makes the Registry send an email on each code Exception
+    email_exceptions:
+        smtp_host: _env:SMTP_HOST
+        smtp_port: _env:SMTP_PORT:25
+        smtp_login: _env:SMTP_LOGIN
+        smtp_password: _env:SMTP_PASSWORD
+        smtp_secure: _env:SMTP_SECURE:false
+        from_addr: _env:SMTP_FROM_ADDR:docker-registry@localdomain.local
+        to_addr: _env:SMTP_TO_ADDR:noise+dockerregistry@localdomain.local
+
+    # Enable bugsnag (set the API key)
+    bugsnag: _env:BUGSNAG
+
+    # CORS support is not enabled by default
+    cors:
+        origins: _env:CORS_ORIGINS
+        methods: _env:CORS_METHODS
+        headers: _env:CORS_HEADERS:[Content-Type]
+        expose_headers: _env:CORS_EXPOSE_HEADERS
+        supports_credentials: _env:CORS_SUPPORTS_CREDENTIALS
+        max_age: _env:CORS_MAX_AGE
+        send_wildcard: _env:CORS_SEND_WILDCARD
+        always_send: _env:CORS_ALWAYS_SEND
+        automatic_options: _env:CORS_AUTOMATIC_OPTIONS
+        vary_header: _env:CORS_VARY_HEADER
+        resources: _env:CORS_RESOURCES
+
+local: &local
+    <<: *common
+    storage: local
+    storage_path: _env:STORAGE_PATH:/var/docker-registry
+
+
+s3: &s3
+    <<: *common
+    storage: s3
+    s3_region: _env:AWS_REGION
+    s3_bucket: _env:AWS_BUCKET
+    boto_bucket: _env:AWS_BUCKET
+    storage_path: _env:STORAGE_PATH:/registry
+    s3_encrypt: _env:AWS_ENCRYPT:true
+    s3_secure: _env:AWS_SECURE:true
+    s3_access_key: _env:AWS_KEY
+    s3_secret_key: _env:AWS_SECRET
+    s3_use_sigv4: _env:AWS_USE_SIGV4
+    boto_host: _env:AWS_HOST
+    boto_port: _env:AWS_PORT
+    boto_calling_format: _env:AWS_CALLING_FORMAT
+
+cloudfronts3: &cloudfronts3
+    <<: *s3
+    cloudfront:
+        base: _env:CF_BASE_URL
+        keyid: _env:CF_KEYID
+        keysecret: _env:CF_KEYSECRET
+
+azureblob: &azureblob
+    <<: *common
+    storage: azureblob
+    azure_storage_account_name: _env:AZURE_STORAGE_ACCOUNT_NAME
+    azure_storage_account_key: _env:AZURE_STORAGE_ACCOUNT_KEY
+    azure_storage_container: _env:AZURE_STORAGE_CONTAINER:registry
+    azure_use_https: _env:AZURE_USE_HTTPS:true
+
+# Ceph Object Gateway Configuration
+# See http://ceph.com/docs/master/radosgw/ for details on installing this service.
+ceph-s3: &ceph-s3
+    <<: *common
+    storage: s3
+    s3_region: ~
+    s3_bucket: _env:AWS_BUCKET
+    s3_encrypt: _env:AWS_ENCRYPT:false
+    s3_secure: _env:AWS_SECURE:false
+    storage_path: _env:STORAGE_PATH:/registry
+    s3_access_key: _env:AWS_KEY
+    s3_secret_key: _env:AWS_SECRET
+    boto_bucket: _env:AWS_BUCKET
+    boto_host: _env:AWS_HOST
+    boto_port: _env:AWS_PORT
+    boto_debug: _env:AWS_DEBUG:0
+    boto_calling_format: _env:AWS_CALLING_FORMAT
+
+# Google Cloud Storage Configuration
+# See:
+# https://developers.google.com/storage/docs/reference/v1/getting-startedv1#keys
+# for details on access and secret keys.
+gcs:
+    <<: *common
+    storage: gcs
+    boto_bucket: _env:GCS_BUCKET
+    storage_path: _env:STORAGE_PATH:/registry
+    gs_secure: _env:GCS_SECURE:true
+    gs_access_key: _env:GCS_KEY
+    gs_secret_key: _env:GCS_SECRET
+    # OAuth 2.0 authentication with the storage.
+    # oauth2 can be set to true or false. If it is set to true, gs_access_key,
+    # gs_secret_key and gs_secure are not needed.
+    # Client ID and Client Secret must be set into OAUTH2_CLIENT_ID and
+    # OAUTH2_CLIENT_SECRET environment variables.
+    # See: https://developers.google.com/accounts/docs/OAuth2.
+    oauth2: _env:GCS_OAUTH2:false
+
+# This flavor is for storing images in Openstack Swift
+swift: &swift
+    <<: *common
+    storage: swift
+    storage_path: _env:STORAGE_PATH:/registry
+    # keystone authorization
+    swift_authurl: _env:OS_AUTH_URL
+    swift_container: _env:OS_CONTAINER
+    swift_user: _env:OS_USERNAME
+    swift_password: _env:OS_PASSWORD
+    swift_tenant_name: _env:OS_TENANT_NAME
+    swift_region_name: _env:OS_REGION_NAME
+
+# This flavor stores the images in Glance (to integrate with openstack)
+# See also: https://github.com/docker/openstack-docker
+glance: &glance
+    <<: *common
+    storage: glance
+    storage_alternate: _env:GLANCE_STORAGE_ALTERNATE:file
+    storage_path: _env:STORAGE_PATH:/var/docker-registry
+
+openstack:
+    <<: *glance
+
+# This flavor stores the images in Glance (to integrate with openstack)
+# and tags in Swift.
+glance-swift: &glance-swift
+    <<: *swift
+    storage: glance
+    storage_alternate: swift
+
+openstack-swift:
+    <<: *glance-swift
+
+elliptics:
+    <<: *common
+    storage: elliptics
+    elliptics_nodes: _env:ELLIPTICS_NODES
+    elliptics_wait_timeout: _env:ELLIPTICS_WAIT_TIMEOUT:60
+    elliptics_check_timeout: _env:ELLIPTICS_CHECK_TIMEOUT:60
+    elliptics_io_thread_num: _env:ELLIPTICS_IO_THREAD_NUM:2
+    elliptics_net_thread_num: _env:ELLIPTICS_NET_THREAD_NUM:2
+    elliptics_nonblocking_io_thread_num: _env:ELLIPTICS_NONBLOCKING_IO_THREAD_NUM:2
+    elliptics_groups: _env:ELLIPTICS_GROUPS
+    elliptics_verbosity: _env:ELLIPTICS_VERBOSITY:4
+    elliptics_logfile: _env:ELLIPTICS_LOGFILE:/dev/stderr
+    elliptics_addr_family: _env:ELLIPTICS_ADDR_FAMILY:2
+
+# This flavor stores the images in Aliyun OSS
+# See:
+# https://i.aliyun.com/access_key/
+# for details on access and secret keys.
+oss: &oss
+    <<: *common
+    storage: oss
+    storage_path: _env:STORAGE_PATH:/registry/
+    oss_host: _env:OSS_HOST
+    oss_bucket: _env:OSS_BUCKET
+    oss_accessid: _env:OSS_KEY
+    oss_accesskey: _env:OSS_SECRET
+
+
+
+# This is the default configuration when no flavor is specified
+dev: &dev
+    <<: *local
+    loglevel: _env:LOGLEVEL:debug
+    debug: _env:DEBUG:true
+    search_backend: _env:SEARCH_BACKEND:sqlalchemy
+
+# This flavor is used by unit tests
+test:
+    <<: *dev
+    index_endpoint: https://registry-stage.hub.docker.com
+    standalone: true
+    storage_path: _env:STORAGE_PATH:./tmp/test
+
+# To specify another flavor, set the environment variable SETTINGS_FLAVOR
+# $ export SETTINGS_FLAVOR=prod
+prod:
+    <<: *s3
+    storage_path: _env:STORAGE_PATH:/prod
+
diff --git a/recipes-containers/docker-registry/files/docker-registry.conf b/recipes-containers/docker-registry/files/docker-registry.conf
new file mode 100644
index 0000000..940ece1
--- /dev/null
+++ b/recipes-containers/docker-registry/files/docker-registry.conf
@@ -0,0 +1,19 @@
+# The Docker registry configuration file
+DOCKER_REGISTRY_CONFIG=/etc/docker-registry.yml
+
+# The configuration to use from DOCKER_REGISTRY_CONFIG file
+SETTINGS_FLAVOR=local
+
+# Address to bind the registry to
+REGISTRY_ADDRESS=0.0.0.0
+
+# Port to bind the registry to
+REGISTRY_PORT=5000
+
+# Number of workers to handle the connections
+GUNICORN_WORKERS=4
+
+STANDALONE=true
+
+MIRROR_SOURCE=https://registry-1.docker.io
+MIRROR_SOURCE_INDEX=https://index.docker.io
diff --git a/recipes-containers/docker-registry/files/docker-registry.service b/recipes-containers/docker-registry/files/docker-registry.service
new file mode 100644
index 0000000..4f4cfe7
--- /dev/null
+++ b/recipes-containers/docker-registry/files/docker-registry.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=Registry server for Docker
+After=docker.service
+Requires=docker.service
+
+[Service]
+Type=simple
+Environment=DOCKER_REGISTRY_CONFIG=/etc/docker-registry.yml
+EnvironmentFile=-/etc/default/docker-registry
+WorkingDirectory=#WORKDIR#
+ExecStart=/usr/bin/gunicorn --access-logfile /var/log/docker-registry-access.log --error-logfile /var/log/docker-registry-error.log --debug --max-requests 100 --graceful-timeout 3600 -t 3600 -k gevent -b ${REGISTRY_ADDRESS}:${REGISTRY_PORT} -w ${GUNICORN_WORKERS} docker_registry.wsgi:application
+Restart=on-failure
+
+[Install]
+WantedBy=multi-user.target
-- 
2.1.4



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 4/5] Add cgroup-lite
  2015-02-27 21:40 [PATCH 0/5] Package docker + docker-registry Amy Fong
  2015-02-27 21:40 ` [PATCH 1/5] Add golang-cross Amy Fong
  2015-02-27 21:41 ` [PATCH 3/5] Package docker-registry Amy Fong
@ 2015-02-27 21:41 ` Amy Fong
  2015-02-27 21:41 ` [PATCH 5/5] Add python packages needed for docker-registry Amy Fong
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 9+ messages in thread
From: Amy Fong @ 2015-02-27 21:41 UTC (permalink / raw)
  To: meta-virtualization

From a2c06f9bae2e0eb6095b376adaa24f2d56870bd6 Mon Sep 17 00:00:00 2001
From: Amy Fong <amy.fong@windriver.com>
Date: Fri, 27 Feb 2015 16:00:20 -0500
Subject: [PATCH 4/5] Add cgroup-lite

Light-weight package to set up cgroups at system boot

Signed-off-by: Amy Fong <amy.fong@windriver.com>
---
 recipes-containers/cgroup-lite/cgroup-lite_1.1.bb | 22 ++++++++++++++++++
 recipes-containers/cgroup-lite/files/cgroups-init | 27 +++++++++++++++++++++++
 2 files changed, 49 insertions(+)
 create mode 100644 recipes-containers/cgroup-lite/cgroup-lite_1.1.bb
 create mode 100755 recipes-containers/cgroup-lite/files/cgroups-init

diff --git a/recipes-containers/cgroup-lite/cgroup-lite_1.1.bb b/recipes-containers/cgroup-lite/cgroup-lite_1.1.bb
new file mode 100644
index 0000000..3ca5238
--- /dev/null
+++ b/recipes-containers/cgroup-lite/cgroup-lite_1.1.bb
@@ -0,0 +1,22 @@
+SECTION = "devel"
+SUMMARY = "Light-weight package to set up cgroups at system boot."
+DESCRIPTION =  "Light-weight package to set up cgroups at system boot."
+HOMEPAGE = "http://packages.ubuntu.com/source/precise/cgroup-lite"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://debian/copyright;md5=5d5da4e0867cf06014f87102154d0102"
+SRC_URI = "http://archive.ubuntu.com/ubuntu/pool/main/c/cgroup-lite/cgroup-lite_1.1.tar.gz"
+SRC_URI += "file://cgroups-init"
+SRC_URI[md5sum] = "041a0d8ad2b192271a2e5507fdb6809f"
+SRC_URI[sha256sum] = "e7f9992b90b5b4634f3b8fb42580ff28ff31093edb297ab872c37f61a94586bc"
+
+inherit update-rc.d
+
+INITSCRIPT_NAME = "cgroups-init"
+INITSCRIPT_PARAMS = "start 8 2 3 4 5 . stop 20 0 1 6 ."
+do_install() {
+	install -d ${D}/bin
+	install -d ${D}${sysconfdir}/init.d
+	install -m 0755 ${S}/scripts/cgroups-mount ${D}/bin
+	install -m 0755 ${S}/scripts/cgroups-umount ${D}/bin
+	install -m 0755 ${WORKDIR}/cgroups-init ${D}${sysconfdir}/init.d/cgroups-init
+}
diff --git a/recipes-containers/cgroup-lite/files/cgroups-init b/recipes-containers/cgroup-lite/files/cgroups-init
new file mode 100755
index 0000000..e504024
--- /dev/null
+++ b/recipes-containers/cgroup-lite/files/cgroups-init
@@ -0,0 +1,27 @@
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides:          cgroups mount
+# Required-Start:    $network $remote_fs
+# Required-Stop:     $network $remote_fs
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: mount/unmount cgroups
+### END INIT INFO
+
+# must start before libvirtd is run
+case "$1" in
+  start)
+        echo -n "Mounting cgroups..."
+		/bin/cgroups-mount
+        echo "Done"
+        ;;
+  stop)
+        echo -n "Unmounting cgroups..."
+		/bin/cgroups-umount
+        echo "Done"
+        ;;
+  *)
+        echo "Usage: /etc/init.d/cgroups-init {start|stop}"
+        exit 1
+        ;;
+esac
-- 
2.1.4



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 5/5] Add python packages needed for docker-registry
  2015-02-27 21:40 [PATCH 0/5] Package docker + docker-registry Amy Fong
                   ` (2 preceding siblings ...)
  2015-02-27 21:41 ` [PATCH 4/5] Add cgroup-lite Amy Fong
@ 2015-02-27 21:41 ` Amy Fong
  2015-03-01  4:36 ` [PATCH 2/5] Package docker Amy Fong
  2015-03-02 20:40 ` [PATCH 0/5] Package docker + docker-registry Bruce Ashfield
  5 siblings, 0 replies; 9+ messages in thread
From: Amy Fong @ 2015-02-27 21:41 UTC (permalink / raw)
  To: meta-virtualization

From 3b4ff3a96aaaa673589bd13727d9500e79db880b Mon Sep 17 00:00:00 2001
From: Amy Fong <amy.fong@windriver.com>
Date: Fri, 27 Feb 2015 16:01:22 -0500
Subject: [PATCH 5/5] Add python packages needed for docker-registry

Signed-off-by: Amy Fong <amy.fong@windriver.com>
---
 recipes-support/gunicorn/gunicorn_19.1.1.bb        | 15 ++++++
 .../python-backports-lzma/fix_paths.patch          | 17 ++++++
 .../python-backports-lzma_0.0.3.bb                 | 32 ++++++++++++
 .../python-blinker/python-blinker_1.3.bb           | 22 ++++++++
 recipes-support/python-boto/python-boto_2.34.0.bb  | 25 +++++++++
 .../python-bugsnag/python-bugsnag_2.0.2.bb         | 26 ++++++++++
 .../python-docker-registry-core_2.0.3.bb           | 29 +++++++++++
 .../python-flask-cors/python-flask-cors_1.10.3.bb  | 22 ++++++++
 .../python-gevent/files/libev-conf.patch           | 19 +++++++
 .../python-gevent/python-gevent_1.0.1.bb           | 24 +++++++++
 .../python-m2crypto/python-m2crypto_0.22.3.bb      | 60 ++++++++++++++++++++++
 .../python-newrelic/python-newrelic_2.22.0.19.bb   | 26 ++++++++++
 .../python-pyyaml/python-pyyaml_3.11.bb            | 30 +++++++++++
 .../python-redis/python-redis_2.10.3.bb            | 20 ++++++++
 .../python-requests/python-requests_2.3.0.bb       | 29 +++++++++++
 .../python-simplejson/python-simplejson_3.6.2.bb   | 31 +++++++++++
 16 files changed, 427 insertions(+)
 create mode 100644 recipes-support/gunicorn/gunicorn_19.1.1.bb
 create mode 100644 recipes-support/python-backports-lzma/python-backports-lzma/fix_paths.patch
 create mode 100644 recipes-support/python-backports-lzma/python-backports-lzma_0.0.3.bb
 create mode 100644 recipes-support/python-blinker/python-blinker_1.3.bb
 create mode 100644 recipes-support/python-boto/python-boto_2.34.0.bb
 create mode 100644 recipes-support/python-bugsnag/python-bugsnag_2.0.2.bb
 create mode 100644 recipes-support/python-docker-registry-core/python-docker-registry-core_2.0.3.bb
 create mode 100644 recipes-support/python-flask-cors/python-flask-cors_1.10.3.bb
 create mode 100644 recipes-support/python-gevent/files/libev-conf.patch
 create mode 100644 recipes-support/python-gevent/python-gevent_1.0.1.bb
 create mode 100644 recipes-support/python-m2crypto/python-m2crypto_0.22.3.bb
 create mode 100644 recipes-support/python-newrelic/python-newrelic_2.22.0.19.bb
 create mode 100644 recipes-support/python-pyyaml/python-pyyaml_3.11.bb
 create mode 100644 recipes-support/python-redis/python-redis_2.10.3.bb
 create mode 100644 recipes-support/python-requests/python-requests_2.3.0.bb
 create mode 100644 recipes-support/python-simplejson/python-simplejson_3.6.2.bb

diff --git a/recipes-support/gunicorn/gunicorn_19.1.1.bb b/recipes-support/gunicorn/gunicorn_19.1.1.bb
new file mode 100644
index 0000000..bbe03ea
--- /dev/null
+++ b/recipes-support/gunicorn/gunicorn_19.1.1.bb
@@ -0,0 +1,15 @@
+SUMMARY = "WSGI HTTP Server for UNIX"
+DESCRIPTION = "\
+  Gunicorn ‘Green Unicorn’ is a Python WSGI HTTP Server for UNIX. It’s \
+  a pre-fork worker model ported from Ruby’s Unicorn project. The \
+  Gunicorn server is broadly compatible with various web frameworks, \
+  simply implemented, light on server resource usage, and fairly speedy. \
+  " 
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=19a2e253a273e390cd1b91d19b6ee236"
+
+SRC_URI = "https://pypi.python.org/packages/source/g/gunicorn/${PN}-${PV}.tar.gz"
+SRC_URI[md5sum] = "eaa72bff5341c05169b76ce3dcbb8140"
+SRC_URI[sha256sum] = "82715511fb6246fad4ba66d812eb93416ae8371b464fa88bf3867c9c177daa14"
+
+inherit setuptools
diff --git a/recipes-support/python-backports-lzma/python-backports-lzma/fix_paths.patch b/recipes-support/python-backports-lzma/python-backports-lzma/fix_paths.patch
new file mode 100644
index 0000000..c2b374f
--- /dev/null
+++ b/recipes-support/python-backports-lzma/python-backports-lzma/fix_paths.patch
@@ -0,0 +1,17 @@
+---
+ setup.py |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/setup.py
++++ b/setup.py
+@@ -32,8 +32,8 @@
+ extens = [Extension('backports/lzma/_lzma',
+                     ['backports/lzma/_lzmamodule.c'],
+                     libraries = ['lzma'],
+-                    include_dirs = [os.path.join(home, 'include'), '/opt/local/include', '/usr/local/include'],
+-                    library_dirs = [os.path.join(home, 'lib'), '/opt/local/lib', '/usr/local/lib']
++                    include_dirs = [],
++                    library_dirs = []
+                     )]
+ 
+ descr = "Backport of Python 3.3's 'lzma' module for XZ/LZMA compressed files."
diff --git a/recipes-support/python-backports-lzma/python-backports-lzma_0.0.3.bb b/recipes-support/python-backports-lzma/python-backports-lzma_0.0.3.bb
new file mode 100644
index 0000000..a3586c0
--- /dev/null
+++ b/recipes-support/python-backports-lzma/python-backports-lzma_0.0.3.bb
@@ -0,0 +1,32 @@
+HOMEPAGE = "https://github.com/peterjc/backports.lzma"
+SUMMARY = "\
+  Backport of Python 3.3's 'lzma' module for XZ/LZMA compressed files."
+DESCRIPTION = "\
+  This is a backport of the 'lzma' module included in Python 3.3 or later \
+  by Nadeem Vawda and Per Oyvind Karlsen, which provides a Python wrapper \
+  for XZ Utils (aka LZMA Utils v2) by Igor Pavlov. \
+  . \
+  In order to compile this, you will need to install XZ Utils from \
+  http://tukaani.org/xz/ \
+  "
+SECTION = "devel/python"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=db4345b3b9524aabc8fe8c65f235c6b2"
+
+SRC_URI[md5sum] = "c3d109746aefa86268e500c07d7e8e0f"
+SRC_URI[sha256sum] = "bac58aec8d39ac3d22250840fb24830d0e4a0ef05ad8f3f09172dc0cc80cdbca"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit setuptools
+
+DEPENDS += "xz"
+
+SRCNAME = "backports.lzma"
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+
+SRC_URI = "\
+	https://pypi.python.org/packages/source/b/backports.lzma/${SRCNAME}-${PV}.tar.gz \
+	file://fix_paths.patch \
+	"
diff --git a/recipes-support/python-blinker/python-blinker_1.3.bb b/recipes-support/python-blinker/python-blinker_1.3.bb
new file mode 100644
index 0000000..24e19b5
--- /dev/null
+++ b/recipes-support/python-blinker/python-blinker_1.3.bb
@@ -0,0 +1,22 @@
+HOMEPAGE = "https://pypi.python.org/pypi/blinker"
+SUMMARY = "Fast, simple object-to-object and broadcast signaling"
+DESCRIPTION = " \
+  Blinker provides a fast dispatching system that allows any number of \
+  interested parties to subscribe to events, or “signals”. \
+  . \
+  Signal receivers can subscribe to specific senders or receive signals \
+  sent by any sender. \
+  "
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8baf1d53a00de619f60052e4752a89af"
+
+SRCNAME = "blinker"
+SRC_URI = "https://pypi.python.org/packages/source/b/blinker/${SRCNAME}-${PV}.tar.gz"
+SRC_URI[md5sum] = "66e9688f2d287593a0e698cd8a5fbc57"
+SRC_URI[sha256sum] = "6811010809262261e41ab7b92f3f6d23f35cf816fbec2bc05077992eebec6e2f"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit setuptools
+
diff --git a/recipes-support/python-boto/python-boto_2.34.0.bb b/recipes-support/python-boto/python-boto_2.34.0.bb
new file mode 100644
index 0000000..f94f324
--- /dev/null
+++ b/recipes-support/python-boto/python-boto_2.34.0.bb
@@ -0,0 +1,25 @@
+HOMEPAGE = "https://github.com/boto/boto"
+SUMMARY = "Amazon Web Services API"
+DESCRIPTION = "\
+  Boto is a Python package that provides interfaces to Amazon Web Services. \
+  Currently, all features work with Python 2.6 and 2.7. Work is under way to \
+  support Python 3.3+ in the same codebase. Modules are being ported one at \
+  a time with the help of the open source community, so please check below \
+  for compatibility with Python 3.3+. \
+  "
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://setup.py;md5=182ef81236d3fac2c6ed8e8d3c988ec8"
+
+PR = "r0"
+SRCNAME = "boto"
+
+SRC_URI = "https://pypi.python.org/packages/source/b/boto/${SRCNAME}-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "5556223d2d0cc4d06dd4829e671dcecd"
+SRC_URI[sha256sum] = "33baab022ecb803414ad0d6cf4041d010cfc2755ff8acc3bea7b32e77ba98be0"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit setuptools
+
diff --git a/recipes-support/python-bugsnag/python-bugsnag_2.0.2.bb b/recipes-support/python-bugsnag/python-bugsnag_2.0.2.bb
new file mode 100644
index 0000000..edf880f
--- /dev/null
+++ b/recipes-support/python-bugsnag/python-bugsnag_2.0.2.bb
@@ -0,0 +1,26 @@
+HOMEPAGE = "https://bugsnag.com/"
+SUMMARY = "Automatic error monitoring for django, flask, etc."
+DESCRIPTION = "\
+  The official Python notifier for `Bugsnag <https://bugsnag.com/>`_. \
+  Provides support for automatically capturing and sending exceptions \
+  in your Django and other Python apps to Bugsnag, to help you find \
+  and solve your bugs as fast as possible. \
+  "
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=f6df6ab9f1b615a140ebb2a48f61bddc"
+
+PR = "r0"
+SRCNAME = "bugsnag"
+
+SRC_URI = "https://pypi.python.org/packages/source/b/bugsnag/${SRCNAME}-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "e16360d86979890892cd388635f213e7"
+SRC_URI[sha256sum] = "093934b3cd1d36ba2b89cfe1673b14ba59043417fe500a02dbf6de0df43ea962"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit setuptools
+
+DEPENDS += "python-webob python-flask python-blinker"
+
diff --git a/recipes-support/python-docker-registry-core/python-docker-registry-core_2.0.3.bb b/recipes-support/python-docker-registry-core/python-docker-registry-core_2.0.3.bb
new file mode 100644
index 0000000..7aa6825
--- /dev/null
+++ b/recipes-support/python-docker-registry-core/python-docker-registry-core_2.0.3.bb
@@ -0,0 +1,29 @@
+HOMEPAGE = "https://pypi.python.org/pypi/docker-registry-core"
+SUMMARY = "Docker registry core package"
+DESCRIPTION = "core package for docker-registry (drivers) developers"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+SRCNAME = "docker-registry-core"
+
+SRC_URI = "https://pypi.python.org/packages/source/d/docker-registry-core/${SRCNAME}-${PV}.tar.gz"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+SRC_URI[md5sum] = "610ef9395f2e9a2f91c68d13325fce7b"
+SRC_URI[sha256sum] = "347e804f1f35b28dbe27bf8d7a0b630fca29d684032139bf26e3940572360360"
+
+inherit setuptools
+
+DEPENDS += "\
+	python-distribute \
+	python-boto (= 2.34.0) \
+	python-redis (= 2.10.3) \
+	python-simplejson (= 3.6.2) \
+	"
+
+# boto 2.34.0
+# redis 2.10.3
+# simplejson 3.6.2
+# setuptools 5.8
diff --git a/recipes-support/python-flask-cors/python-flask-cors_1.10.3.bb b/recipes-support/python-flask-cors/python-flask-cors_1.10.3.bb
new file mode 100644
index 0000000..c39e9b2
--- /dev/null
+++ b/recipes-support/python-flask-cors/python-flask-cors_1.10.3.bb
@@ -0,0 +1,22 @@
+HOMEPAGE = "https://pypi.python.org/pypi/Flask-Cors/1.10.3"
+SUMMARY = "A Flask extension adding a decorator for CORS support"
+DESCRIPTION = "\
+  A Flask extension for handling Cross Origin Resource Sharing (CORS), making cross-origin AJAX possible \
+  "
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4784781a5ee9fed9c50272e733e07685"
+
+DEPENDS += "python-six python-flask"
+
+PR = "r0"
+SRCNAME = "Flask-Cors"
+
+SRC_URI = "https://pypi.python.org/packages/source/F/Flask-Cors/${SRCNAME}-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "4f3c75ace0f724d1de167bd73745c965"
+SRC_URI[sha256sum] = "9e6927aa0a46f314bca0ec63eb871cee898a162adfdd5b65224db7a008287423"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit setuptools
diff --git a/recipes-support/python-gevent/files/libev-conf.patch b/recipes-support/python-gevent/files/libev-conf.patch
new file mode 100644
index 0000000..283705f
--- /dev/null
+++ b/recipes-support/python-gevent/files/libev-conf.patch
@@ -0,0 +1,19 @@
+Due to differences in library locations, the cross compile test can fail because it can't run
+the conftest binary (dynamically linked). Building it statically instead.
+
+Signed-off-by: Amy Fong <amy.fong@windriver.com>
+---
+ libev/configure |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/libev/configure
++++ b/libev/configure
+@@ -2730,7 +2730,7 @@
+ ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_link='$CC -static -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ if test -n "$ac_tool_prefix"; then
+   # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
diff --git a/recipes-support/python-gevent/python-gevent_1.0.1.bb b/recipes-support/python-gevent/python-gevent_1.0.1.bb
new file mode 100644
index 0000000..9c559bc
--- /dev/null
+++ b/recipes-support/python-gevent/python-gevent_1.0.1.bb
@@ -0,0 +1,24 @@
+HOMEPAGE = "http://www.gevent.org"
+SUMMARY = "A coroutine-based Python networking library"
+DESCRIPTION = "\
+  gevent is a coroutine-based Python networking library that uses greenlet \
+  to provide a high-level synchronous API on top of the libevent event \
+  loop. \
+  " 
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=2dbb33d00e1fd31c7041460a81ac0bd2"
+DEPENDS += "python-greenlet libevent"
+RDEPENDS_${PN} += "python-greenlet python-mime python-pprint python-re"
+
+SRCNAME = "gevent"
+
+SRC_URI = "http://pypi.python.org/packages/source/g/gevent/${SRCNAME}-${PV}.tar.gz"
+SRC_URI[md5sum] = "7b952591d1a0174d6eb6ac47bd975ab6"
+SRC_URI[sha256sum] = "4627e215d058f71d95e6b26d9e7be4c263788a4756bd2858a93775f6c072df43"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit setuptools
+
+SRC_URI += "file://libev-conf.patch"
diff --git a/recipes-support/python-m2crypto/python-m2crypto_0.22.3.bb b/recipes-support/python-m2crypto/python-m2crypto_0.22.3.bb
new file mode 100644
index 0000000..3325455
--- /dev/null
+++ b/recipes-support/python-m2crypto/python-m2crypto_0.22.3.bb
@@ -0,0 +1,60 @@
+HOMEPAGE = "http://chandlerproject.org/bin/view/Projects/MeTooCrypto"
+SUMMARY = "A Python crypto and SSL toolkit"
+DESCRIPTION = "\
+  M2Crypto is the most complete Python wrapper for OpenSSL featuring RSA, \
+  DSA, DH, EC, HMACs, message digests, symmetric ciphers (including \
+  AES); SSL functionality to implement clients and servers; HTTPS \
+  extensions to Python's httplib, urllib, and xmlrpclib; unforgeable \
+  HMAC'ing AuthCookies for web session management; FTP/TLS client and \
+  server; S/MIME; ZServerSSL: A HTTPS server for Zope and ZSmime: An \
+  S/MIME messenger for Zope. M2Crypto can also be used to provide SSL \
+  for Twisted. \
+  "
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=0ccca7097c1d29fa42e75e9c15c6ff2e"
+
+SRCNAME = "M2Crypto"
+SRC_URI = "http://pypi.python.org/packages/source/M/M2Crypto/${SRCNAME}-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "573f21aaac7d5c9549798e72ffcefedd"
+SRC_URI[sha256sum] = "6071bfc817d94723e9b458a010d565365104f84aa73f7fe11919871f7562ff72"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit setuptools
+
+DEPENDS += "openssl swig-native"
+
+DISTUTILS_BUILD_ARGS += "build_ext -I${STAGING_INCDIR}"
+
+inherit setuptools
+
+SWIG_FEATURES_x86-64 = "-D__x86_64__"
+SWIG_FEATURES ?= ""
+export SWIG_FEATURES
+
+# Get around a problem with swig, but only if the
+# multilib header file exists.
+#
+do_compile_prepend() {
+	sed -i -e 's/self.add_multiarch_paths.*$/# &/;'  ${S}/setup.py
+	sed -i -e 's/opensslIncludeDir = .*$/opensslIncludeDir = os.getenv("STAGING_INCDIR")/;'  ${S}/setup.py
+	sed -i -e 's/opensslLibraryDir = .*$/opensslLibraryDir = os.getenv("STAGING_LIBDIR")/;'  ${S}/setup.py
+
+	if [ "${SITEINFO_BITS}" = "64" ];then
+		bit="64"
+	else
+		bit="32"
+	fi
+
+	if [ -e ${STAGING_INCDIR}/openssl/opensslconf-${bit}.h ]; then
+		for i in SWIG/_ec.i SWIG/_evp.i; do
+			sed -i -e "s/opensslconf.*\./opensslconf-${bit}\./" "$i"
+		done
+	elif [ -e ${STAGING_INCDIR}/openssl/opensslconf-n${bit}.h ] ;then
+		for i in SWIG/_ec.i SWIG/_evp.i; do
+			sed -i -e "s/opensslconf.*\./opensslconf-n${bit}\./" "$i"
+		done
+	fi
+}
+
diff --git a/recipes-support/python-newrelic/python-newrelic_2.22.0.19.bb b/recipes-support/python-newrelic/python-newrelic_2.22.0.19.bb
new file mode 100644
index 0000000..3891824
--- /dev/null
+++ b/recipes-support/python-newrelic/python-newrelic_2.22.0.19.bb
@@ -0,0 +1,26 @@
+HOMEPAGE = "http://www.newrelic.com"
+SUMMARY = "New Relic Python Agent"
+DESCRIPTION = "\
+  Python agent for the New Relic web application performance monitoring \
+  service. Check the release notes for what has changed in this version. \
+  "
+SECTION = "devel/python"
+LICENSE = "BSD-3-Clause & MIT & Python-2.0 & BSD-2-Clause & NewRelic"
+LIC_FILES_CHKSUM = "file://newrelic/LICENSE;md5=0f6cc160a8ed6759faa408a30b6ac978"
+
+PR = "r0"
+SRCNAME = "newrelic"
+
+SRC_URI = "https://pypi.python.org/packages/source/n/newrelic/${SRCNAME}-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "f8c9bf996d040a11847d14682b290eff"
+SRC_URI[sha256sum] = "aa8869413c21aff441a77582df1e0fdc0f67342760eb7560d33ed3bbed7edf7b"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit setuptools
+
+FILES_${PN}-dbg += "\
+  ${PYTHON_SITEPACKAGES_DIR}/newrelic-${PV}/newrelic/*/.debug \
+  ${PYTHON_SITEPACKAGES_DIR}/newrelic-${PV}/newrelic/packages/*/.debug/ \
+  "
diff --git a/recipes-support/python-pyyaml/python-pyyaml_3.11.bb b/recipes-support/python-pyyaml/python-pyyaml_3.11.bb
new file mode 100644
index 0000000..cb1db8c
--- /dev/null
+++ b/recipes-support/python-pyyaml/python-pyyaml_3.11.bb
@@ -0,0 +1,30 @@
+HOMEPAGE = "http://www.pyyaml.org"
+SUMMARY = "Python support for YAML"
+DESCRIPTION = "\
+  YAML is a data serialization format designed for human readability \
+  and interaction with scripting languages.  PyYAML is a YAML parser \
+  and emitter for Python. \
+  .       \
+  PyYAML features a complete YAML 1.1 parser, Unicode support, pickle \
+  support, capable extension API, and sensible error messages.  PyYAML \
+  supports standard YAML tags and provides Python-specific tags that \
+  allow to represent an arbitrary Python object. \
+  .       \
+  PyYAML is applicable for a broad range of tasks from complex \
+  configuration files to object serialization and persistance. \
+  "
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=6015f088759b10e0bc2bf64898d4ae17"
+
+SRCNAME = "PyYAML"
+SRC_URI = "http://pyyaml.org/download/pyyaml/${SRCNAME}-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "f50e08ef0fe55178479d3a618efe21db"
+SRC_URI[sha256sum] = "c36c938a872e5ff494938b33b14aaa156cb439ec67548fcab3535bb78b0846e8"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit setuptools
+
+DEPENDS += "libyaml python-cython-native"
diff --git a/recipes-support/python-redis/python-redis_2.10.3.bb b/recipes-support/python-redis/python-redis_2.10.3.bb
new file mode 100644
index 0000000..9eda8a5
--- /dev/null
+++ b/recipes-support/python-redis/python-redis_2.10.3.bb
@@ -0,0 +1,20 @@
+HOMEPAGE = "https://pypi.python.org/pypi/redis/"
+SUMMARY = "Python client for Redis key-value store"
+DESCRIPTION = "The Python interface to the Redis key-value store."
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=51d9ad56299ab60ba7be65a621004f27"
+
+PR = "r0"
+SRCNAME = "redis"
+
+SRC_URI = "https://pypi.python.org/packages/source/r/redis/${SRCNAME}-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "7619221ad0cbd124a5687458ea3f5289"
+SRC_URI[sha256sum] = "a4fb37b02860f6b1617f6469487471fd086dd2d38bbce640c2055862b9c4019c"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit setuptools
+
+RDEPENDS_${PN} = "redis"
diff --git a/recipes-support/python-requests/python-requests_2.3.0.bb b/recipes-support/python-requests/python-requests_2.3.0.bb
new file mode 100644
index 0000000..6f38bf1
--- /dev/null
+++ b/recipes-support/python-requests/python-requests_2.3.0.bb
@@ -0,0 +1,29 @@
+HOMEPAGE = "http://python-requests.org"
+SUMMARY = "Python HTTP for Humans."
+DESCRIPTION = "\
+  Requests is an Apache2 Licensed HTTP library, written in Python, \
+  for human beings. \
+  .      \
+  Most existing Python modules for sending HTTP requests are extremely \
+  verbose and cumbersome. Python's builtin urllib2 module provides most \
+  of the HTTP capabilities you should need, but the api is thoroughly \
+  broken.  It requires an enormous amount of work (even method overrides) \
+  to perform the simplest of tasks. \
+  .      \
+  Things shouldn't be this way. Not in Python \
+  "
+SECTION = "devel/python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c7869e52c8275537186de35e3cd5f9ec"
+
+PR = "r0"
+SRCNAME = "requests"
+
+SRC_URI = "http://pypi.python.org/packages/source/r/requests/${SRCNAME}-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "7449ffdc8ec9ac37bbcd286003c80f00"
+SRC_URI[sha256sum] = "1c1473875d846fe563d70868acf05b1953a4472f4695b7b3566d1d978957b8fc"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit setuptools
diff --git a/recipes-support/python-simplejson/python-simplejson_3.6.2.bb b/recipes-support/python-simplejson/python-simplejson_3.6.2.bb
new file mode 100644
index 0000000..f13f1f3
--- /dev/null
+++ b/recipes-support/python-simplejson/python-simplejson_3.6.2.bb
@@ -0,0 +1,31 @@
+HOMEPAGE = "http://cheeseshop.python.org/pypi/simplejson"
+SUMMARY = "Simple, fast, extensible JSON encoder/decoder for Python"
+DESCRIPTION = "\
+  JSON <http://json.org> encoder and decoder for Python 2.5+ \
+  and Python 3.3+.  It is pure Python code with no dependencies, \
+  but includes an optional C extension for a serious speed boost \
+  "
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=c6338d7abd321c0b50a2a547e441c52e"
+PR = "r0"
+
+SRCNAME = "simplejson"
+
+SRC_URI = "https://pypi.python.org/packages/source/s/simplejson/${SRCNAME}-${PV}.tar.gz"
+SRC_URI[md5sum] = "deca871b9bfa4b76ea360756b2a22710"
+SRC_URI[sha256sum] = "99c092209f88d411858f01b14a97a4fcf8c4f438a685e23d733a3d65de52a35d"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit distutils
+
+RDEPENDS_${PN} = "\
+    python-core \
+    python-re \
+    python-io \
+    python-netserver \
+    python-numbers \
+"
+
+
-- 
2.1.4



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 2/5] Package docker
  2015-02-27 21:40 [PATCH 0/5] Package docker + docker-registry Amy Fong
                   ` (3 preceding siblings ...)
  2015-02-27 21:41 ` [PATCH 5/5] Add python packages needed for docker-registry Amy Fong
@ 2015-03-01  4:36 ` Amy Fong
  2015-03-02 20:40 ` [PATCH 0/5] Package docker + docker-registry Bruce Ashfield
  5 siblings, 0 replies; 9+ messages in thread
From: Amy Fong @ 2015-03-01  4:36 UTC (permalink / raw)
  To: meta-virtualization

From 710262f1d13f6a81b77ced6b94c009ab4bd3f1d7 Mon Sep 17 00:00:00 2001
From: Amy Fong <amy.fong@windriver.com>
Date: Fri, 27 Feb 2015 15:59:10 -0500
Subject: [PATCH 2/5] Package docker

Adding docker (Linux container runtime)

Signed-off-by: Amy Fong <amy.fong@windriver.com>
---
 recipes-containers/docker/docker_git.bb        | 122 +++++++++++++++++++++++++
 recipes-containers/docker/files/docker.service |  15 +++
 recipes-containers/docker/files/hi.Dockerfile  |   7 ++
 3 files changed, 144 insertions(+)
 create mode 100644 recipes-containers/docker/docker_git.bb
 create mode 100644 recipes-containers/docker/files/docker.service
 create mode 100644 recipes-containers/docker/files/hi.Dockerfile

diff --git a/recipes-containers/docker/docker_git.bb b/recipes-containers/docker/docker_git.bb
new file mode 100644
index 0000000..a1d6ff4
--- /dev/null
+++ b/recipes-containers/docker/docker_git.bb
@@ -0,0 +1,122 @@
+HOMEPAGE = "http://www.docker.com"
+SUMMARY = "Linux container runtime"
+DESCRIPTION = "Linux container runtime \
+ Docker complements kernel namespacing with a high-level API which \
+ operates at the process level. It runs unix processes with strong \
+ guarantees of isolation and repeatability across servers. \
+ . \
+ Docker is a great building block for automating distributed systems: \
+ large-scale web deployments, database clusters, continuous deployment \
+ systems, private PaaS, service-oriented architectures, etc. \
+ . \
+ This package contains the daemon and client. Using docker.io on non-amd64 \
+ hosts is not supported at this time. Please be careful when using it \
+ on anything besides amd64. \
+ . \
+ Also, note that kernel version 3.8 or above is required for proper \
+ operation of the daemon process, and that any lower versions may have \
+ subtle and/or glaring issues. \
+ "
+
+SRCREV = "2243e32cbbf1c9809c262a7376d34ca43a7a36dc"
+SRC_URI = "\
+	git://github.com/docker/docker.git \
+	file://docker.service \
+	file://hi.Dockerfile \
+	"
+
+# Apache-2.0 for docker
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1cc0497778922bfd6cb48721deb80dc7"
+
+S = "${WORKDIR}/git"
+
+DOCKER_VERSION = "1.5.0"
+PV = "${DOCKER_VERSION}+git${SRCREV}"
+
+DEPENDS = "golang-cross btrfs-tools sqlite3 "
+DEPENDS_append_class-target = "lvm2"
+RDEPENDS_${PN} = "curl aufs-util git cgroup-lite util-linux"
+RRECOMMENDS_${PN} = "lxc docker-registry rt-tests"
+
+do_compile() {
+	export GOARCH="${TARGET_ARCH}"
+	# supported amd64, 386, arm
+	if [ "${TARGET_ARCH}" = "x86_64" ]; then
+		export GOARCH="amd64"
+	fi
+
+	# setting AUTO_GOPATH to use the default vendor configuration
+	# as opposed to setting up GOPATH with all the explicit vendor
+	# directory structure...
+	#
+	# From docker's PACKAGERS.md:
+	# If you'd rather not be bothered with the hassles that setting up
+	# `GOPATH` appropriately can be, and prefer to just get a "build
+	# that works", you should add something similar to this to whatever
+	# script or process you're using to build Docker
+	export AUTO_GOPATH=1
+
+	# Pass the needed cflags/ldflags so that cgo
+	# can find the needed headers files and libraries
+	export CGO_CFLAGS="${BUILD_CFLAGS}"
+	export CGO_LDFLAGS="${BUILD_LDFLAGS}"
+
+	# this is the unsupported built structure
+	# that doesn't rely on an existing docker
+	# to build this:
+	DOCKER_GITCOMMIT="${SRCREV}" \
+	  ./hack/make.sh dynbinary
+
+	export GOPATH=${S}/vendor
+
+	# make nsinit from libcontainer - installed in vendor/bin
+	ln -s ${S} ${S}/vendor/src/github.com/docker/docker
+	mkdir -p ${S}/vendor/src/github.com/codegangsta
+	(cd ${S}/vendor/src/github.com/codegangsta && git clone https://github.com/codegangsta/cli)
+	go install github.com/docker/libcontainer/nsinit/
+}
+
+inherit systemd
+
+SYSTEMD_PACKAGES = "${@base_contains('DISTRO_FEATURES','systemd','${PN}','',d)}"
+SYSTEMD_SERVICE_${PN} = "${@base_contains('DISTRO_FEATURES','systemd','docker.service','',d)}"
+
+do_install() {
+	mkdir -p ${D}/${bindir}
+	cp ${S}/bundles/${DOCKER_VERSION}-dev/dynbinary/docker-${DOCKER_VERSION}-dev \
+	  ${D}/${bindir}/docker
+	cp ${S}/bundles/${DOCKER_VERSION}-dev/dynbinary/dockerinit-${DOCKER_VERSION}-dev \
+	  ${D}/${bindir}/dockerinit
+
+	if ${@base_contains('DISTRO_FEATURES','systemd','true','false',d)}; then
+		install -d ${D}${systemd_unitdir}/system
+		install -m 644 ${S}/contrib/init/systemd/docker.* ${D}/${systemd_unitdir}/system
+		# replaces one copied from above with one that uses the local registry for a mirror
+		install -m 644 ${WORKDIR}/docker.service ${D}/${systemd_unitdir}/system
+	fi
+
+	cp ${S}/vendor/bin/nsinit ${D}/${bindir}
+
+	mkdir -p ${D}/usr/share/docker/
+	cp ${WORKDIR}/hi.Dockerfile ${D}/usr/share/docker/
+}
+
+inherit useradd
+USERADD_PACKAGES = "${PN}"
+GROUPADD_PARAM_${PN} = "-r docker"
+
+FILES_${PN} += "/lib/systemd/system/*"
+
+# DO NOT STRIP docker and dockerinit!!!
+#
+# Reason:
+# The "docker" package contains two binaries: "docker" and "dockerinit",
+# which are both written in Go. The "dockerinit" package is built first,
+# then its checksum is given to the build process compiling the "docker"
+# binary. Hence the checksum of the unstripped "dockerinit" binary is hard
+# coded into the "docker" binary. At runtime the "docker" binary invokes
+# the "dockerinit" binary, but before doing that it ensures the checksum
+# of "dockerinit" matches with the hard coded value.
+#
+INHIBIT_PACKAGE_STRIP = "1"
diff --git a/recipes-containers/docker/files/docker.service b/recipes-containers/docker/files/docker.service
new file mode 100644
index 0000000..6801031
--- /dev/null
+++ b/recipes-containers/docker/files/docker.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=Docker Application Container Engine
+Documentation=http://docs.docker.com
+After=network.target docker.socket
+Requires=docker.socket
+
+[Service]
+ExecStart=/usr/bin/docker -d -H fd:// --registry-mirror=http://localhost:5000 --insecure-registry=http://localhost:5000
+MountFlags=slave
+LimitNOFILE=1048576
+LimitNPROC=1048576
+LimitCORE=infinity
+
+[Install]
+WantedBy=multi-user.target
diff --git a/recipes-containers/docker/files/hi.Dockerfile b/recipes-containers/docker/files/hi.Dockerfile
new file mode 100644
index 0000000..9af6805
--- /dev/null
+++ b/recipes-containers/docker/files/hi.Dockerfile
@@ -0,0 +1,7 @@
+FROM debian
+
+MAINTAINER amy.fong@windriver.com
+
+RUN apt-get update && apt-get install figlet
+
+ENTRYPOINT [ "/usr/bin/figlet", "hi" ]
-- 
2.1.4



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 0/5] Package docker + docker-registry
  2015-02-27 21:40 [PATCH 0/5] Package docker + docker-registry Amy Fong
                   ` (4 preceding siblings ...)
  2015-03-01  4:36 ` [PATCH 2/5] Package docker Amy Fong
@ 2015-03-02 20:40 ` Bruce Ashfield
  2015-03-09 18:33   ` Amy Fong
  5 siblings, 1 reply; 9+ messages in thread
From: Bruce Ashfield @ 2015-03-02 20:40 UTC (permalink / raw)
  To: Amy Fong; +Cc: meta-virtualization

On Fri, Feb 27, 2015 at 4:40 PM, Amy Fong <amy.fong@windriver.com> wrote:
> This set of patches adds the packages docker, docker-registry
> and required dependencies/rdependencies.
>
> The following were added to my BBLAYERS on top
> of a basic yocto/poky build to compile these packages:
>
>   meta-virtualization \
>   meta-cloud-services/meta-openstack \

This is creating a circular dependency. Which recipes in particular do we
need from meta-openstack ?

We need to pull those recipes from meta-openstack to meta-virt, and then
I can take the submission.

Cheers.

Bruce

>   meta-openembedded/meta-oe \
>   meta-openembedded/meta-networking \
>   meta-openembedded/meta-python \
>   meta-openembedded/meta-filesystems \
>
>
> --
> _______________________________________________
> meta-virtualization mailing list
> meta-virtualization@yoctoproject.org
> https://lists.yoctoproject.org/listinfo/meta-virtualization



-- 
"Thou shalt not follow the NULL pointer, for chaos and madness await
thee at its end"


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 0/5] Package docker + docker-registry
  2015-03-02 20:40 ` [PATCH 0/5] Package docker + docker-registry Bruce Ashfield
@ 2015-03-09 18:33   ` Amy Fong
  2015-03-11 18:39     ` M. Asselstine
  0 siblings, 1 reply; 9+ messages in thread
From: Amy Fong @ 2015-03-09 18:33 UTC (permalink / raw)
  To: Bruce Ashfield; +Cc: meta-virtualization

On Mon, Mar 02, 2015 at 03:40:11PM -0500, Bruce Ashfield wrote:
> On Fri, Feb 27, 2015 at 4:40 PM, Amy Fong <amy.fong@windriver.com> wrote:
> > This set of patches adds the packages docker, docker-registry
> > and required dependencies/rdependencies.
> >
> > The following were added to my BBLAYERS on top
> > of a basic yocto/poky build to compile these packages:
> >
> >   meta-virtualization \
> >   meta-cloud-services/meta-openstack \
> 
> This is creating a circular dependency. Which recipes in particular do we
> need from meta-openstack ?
> 
> We need to pull those recipes from meta-openstack to meta-virt, and then
> I can take the submission.
> 
> Cheers.
> 
> Bruce

Sorry, mail got buried.

3 packages:

python-flask
python-webob
python-werkzeug

Amy


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 0/5] Package docker + docker-registry
  2015-03-09 18:33   ` Amy Fong
@ 2015-03-11 18:39     ` M. Asselstine
  0 siblings, 0 replies; 9+ messages in thread
From: M. Asselstine @ 2015-03-11 18:39 UTC (permalink / raw)
  To: Amy Fong; +Cc: meta-virtualization

On Mon, Mar 9, 2015 at 2:33 PM, Amy Fong <amy.fong@windriver.com> wrote:
> On Mon, Mar 02, 2015 at 03:40:11PM -0500, Bruce Ashfield wrote:
>> On Fri, Feb 27, 2015 at 4:40 PM, Amy Fong <amy.fong@windriver.com> wrote:
>> > This set of patches adds the packages docker, docker-registry
>> > and required dependencies/rdependencies.
>> >
>> > The following were added to my BBLAYERS on top
>> > of a basic yocto/poky build to compile these packages:
>> >
>> >   meta-virtualization \
>> >   meta-cloud-services/meta-openstack \
>>
>> This is creating a circular dependency. Which recipes in particular do we
>> need from meta-openstack ?
>>
>> We need to pull those recipes from meta-openstack to meta-virt, and then
>> I can take the submission.
>>
>> Cheers.
>>
>> Bruce
>
> Sorry, mail got buried.
>
> 3 packages:
>
> python-flask
> python-webob
> python-werkzeug

The list turns out to be a bit larger than this as some of these had
their own dependencies. At any rate I have a patch I will send to Amy
which she can use as the base to her series to add these missing
dependencies (Bruce I will send you the matching commit for the
removals in meta-cloud-services)

Amy I have one small change you will want to squash in to your series
as well, again I will send this to you directly.

With this new series will be meta-cloud-services free.

I thought I noticed some python Eggs being downloaded during my build
so I am just doing another build test now with networking disabled so
we can catch these and add them as needed.

Mark

>
> Amy
> --
> _______________________________________________
> meta-virtualization mailing list
> meta-virtualization@yoctoproject.org
> https://lists.yoctoproject.org/listinfo/meta-virtualization


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2015-03-11 18:39 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-02-27 21:40 [PATCH 0/5] Package docker + docker-registry Amy Fong
2015-02-27 21:40 ` [PATCH 1/5] Add golang-cross Amy Fong
2015-02-27 21:41 ` [PATCH 3/5] Package docker-registry Amy Fong
2015-02-27 21:41 ` [PATCH 4/5] Add cgroup-lite Amy Fong
2015-02-27 21:41 ` [PATCH 5/5] Add python packages needed for docker-registry Amy Fong
2015-03-01  4:36 ` [PATCH 2/5] Package docker Amy Fong
2015-03-02 20:40 ` [PATCH 0/5] Package docker + docker-registry Bruce Ashfield
2015-03-09 18:33   ` Amy Fong
2015-03-11 18:39     ` M. Asselstine

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.