gdnsd is an Authoritative-only DNS server with a plugin system for geographic balancing.
Responsible Changed From-To: freebsd-ports-bugs->miwi I'll take it.
# This is a shell archive. Save it in a file, remove anything before # this line, and then unpack it by entering "sh file". Note, it may # create directories; files and directories will be owned by you and # have default permissions. # # This archive contains: # # gdnsd # gdnsd/Makefile # gdnsd/pkg-descr # gdnsd/distinfo # gdnsd/files # gdnsd/files/gdnsd.sh.in # gdnsd/files/patch-docs-config.example # gdnsd/files/patch-GIDs.diff # gdnsd/files/patch-UIDs.diff # gdnsd/pkg-plist # echo c - gdnsd mkdir -p gdnsd > /dev/null 2>&1 echo x - gdnsd/Makefile sed 's/^X//' >gdnsd/Makefile << '1edfaa2afe1e0a6d8a87f2ad49aa3f4d' X# New ports collection makefile for: gdnsd X# Date created: Tue May 15, 2012 X# Whom: Stefan Caunter <stef@scaleengine.com> X# X# $FreeBSD$ X# X XPORTNAME= gdnsd XPORTVERSION= 1.6.7 XCATEGORIES= dns XMASTER_SITES= ${MASTER_SITE_GOOGLE_CODE} XMASTER_SITES+= http://gdnsd.scaleengine.net/gdnsd/ X XMAINTAINER= ports@scaleengine.com XCOMMENT= Authoritative-only GeoIP-aware DNS server X XLICENSE= GPLv3 X XOPTIONS= GEOIP "Enable GeoIP Support" off X X.include <bsd.port.options.mk> X XHAS_CONFIGURE= yes XMAKE_JOBS_SAFE= yes XUSE_LDCONFIG= yes X XMAN1= gdnsd_geoip_test.1 XMAN5= gdnsd.config.5 XMAN5+= gdnsd.zonefile.5 XMAN8= gdnsd.8 XMAN8+= gdnsd-plugin-simplefo.8 XMAN8+= gdnsd-plugin-multifo.8 XMAN8+= gdnsd-plugin-metafo.8 XMAN8+= gdnsd-plugin-geoip.8 XMAN8+= gdnsd-plugin-weighted.8 XMANCOMPRESSED= no X XUSERS = gdnsd XGROUPS = gdnsd X XUSE_RC_SUBR= gdnsd.sh X XCONFIGURE_ARGS+= --mandir=${PREFIX}/man X X.if defined(WITH_GEOIP) XRUN_DEPENDS+= ${LOCALBASE}/share/GeoIP/GeoIP.dat:${PORTSDIR}/net/GeoIP X.endif X Xpost-install: X ${CP} ${WRKDIR}/${DISTNAME}/docs/config.example ${ETCDIR}/config-dist X @if [ ! -f ${ETCDIR}/config ]; then \ X ${CP} -p ${ETCDIR}/config-dist ${ETCDIR}/config ; \ X fi X ${CP} ${WRKDIR}/${DISTNAME}/docs/example.com ${ETCDIR}/example.com X X.include <bsd.port.mk> 1edfaa2afe1e0a6d8a87f2ad49aa3f4d echo x - gdnsd/pkg-descr sed 's/^X//' >gdnsd/pkg-descr << 'ecde11a765ad52b4224419b2eba911ce' Xgdnsd is an Authoritative-only DNS server. XThe initial g stands for Geographic, as gdnsd offers a plugin system for Xgeographic (or other sorts of) balancing, redirection, and Xservice-state-conscious failover. If you don't care about that feature, it's Xstill quite good at being a very fast, lean, and resilient authoritative-only Xserver for static DNS data. X Xgdnsd is written in C using libev and pthreads with a focus on high Xperformance, low latency service. It does not offer any form of caching or Xrecursive service, and does not support DNSSEC. X XWWW: http://code.google.com/p/gdnsd/ ecde11a765ad52b4224419b2eba911ce echo x - gdnsd/distinfo sed 's/^X//' >gdnsd/distinfo << '790e7cd581b808e35aec58ea2dbf5396' XSHA256 (gdnsd-1.6.7.tar.gz) = 39bf9849a586564f60319e4012edc037633077780060a4f925c418871d6d8672 XSIZE (gdnsd-1.6.7.tar.gz) = 942433 790e7cd581b808e35aec58ea2dbf5396 echo c - gdnsd/files mkdir -p gdnsd/files > /dev/null 2>&1 echo x - gdnsd/files/gdnsd.sh.in sed 's/^X//' >gdnsd/files/gdnsd.sh.in << 'ac08c8242855da3a9001180ad6995aab' X#!/bin/sh X X# $FreeBSD$ X# X# PROVIDE: gdnsd X# REQUIRE: DAEMON X# REQUIRE: LOGIN X# KEYWORD: FreeBSD shutdown X# X# Add the following lines to /etc/rc.conf.local or /etc/rc.conf X# to enable this service: X# X# gdnsd_enable (bool): Set to NO by default. X# Set it to YES to enable gdnsd. X# gdnsd_config (path): Set to %%PREFIX%%/etc/gdnsd/config X# by default. X X. /etc/rc.subr X Xname="gdnsd" Xrcvar=`set_rcvar` Xcommand="%%PREFIX%%/sbin/gdnsd" X X# set defaults Xload_rc_config $name X: ${gdnsd_enable:="NO"} X: ${gdnsd_config="%%PREFIX%%/etc/gdnsd/config"} X: ${gdnsd_pidfile="%%PREFIX%%/var/run/gdnsd.pid"} X Xrequired_files=${gdnsd_config} Xcommand_args="-c ${gdnsd_config} start" Xprocname=${command} Xextra_commands="checkconf" Xcheckconf_cmd="gdnsd_checkconf" X Xstop_postcmd=stop_postcmd X Xstop_postcmd() X{ X rm -f ${gdnsd_pidfile} X} X Xgdnsd_checkconf() X{ X ${command} -c ${gdnsd_config} checkconf X} X Xrun_rc_command "$1" X ac08c8242855da3a9001180ad6995aab echo x - gdnsd/files/patch-docs-config.example sed 's/^X//' >gdnsd/files/patch-docs-config.example << '6a9f29be362b0a414c01fe39c589ee02' X--- config.example.orig 2012-05-06 20:26:34.000000000 +0000 X+++ docs/config.example 2012-05-25 20:13:28.000000000 +0000 X@@ -1,4 +1,14 @@ X- X # For more information on configuration, see "man gdnsd.config" X-options => { zones_default_ttl = 43200 } X+ X+options => { X+ username = gdnsd X+ zones_default_ttl = 3600 X+ http_port = 13506 X+ tcp_clients_per_socket = 256 X+ tcp_timeout = 8 X+ max_http_clients = 32 X+ priority = 0 X+ listen = 127.0.0.1 X+ http_listen = 127.0.0.1 X+} X zones => { example.com => { default_ttl = 86400 } } 6a9f29be362b0a414c01fe39c589ee02 echo x - gdnsd/files/patch-GIDs.diff sed 's/^X//' >gdnsd/files/patch-GIDs.diff << 'eb9458f44cc3e2ce683e6d1d7a5b917c' X--- GIDs.orig 2012-05-25 19:52:54.000000000 +0000 X+++ /usr/ports/GIDs 2012-05-25 19:52:48.000000000 +0000 X@@ -230,4 +230,5 @@ X _neubot:*:953: X hadoop:*:955: X pandora:*:956: X+gdnsd:*:957: X nobody:*:65534: eb9458f44cc3e2ce683e6d1d7a5b917c echo x - gdnsd/files/patch-UIDs.diff sed 's/^X//' >gdnsd/files/patch-UIDs.diff << 'f1f138fb7855984e6f78605c705f594e' X--- UIDs.orig 2012-05-25 19:52:39.000000000 +0000 X+++ /usr/ports/UIDs 2012-05-25 19:52:30.000000000 +0000 X@@ -233,4 +233,5 @@ X oops:*:954:65534::0:0:oops user:/nonexistent:/usr/sbin/nologin X hadoop:*:955:955::0:0:hadoop user:/nonexistent:/usr/sbin/nologin X pandora:*:956:956::0:0:Pandora FMS user:/usr/local/etc/pandora/home:/usr/sbin/nologin X+gdnsd:*:957:957::0:0:gdnsd user:/usr/local/etc/gndsd:/usr/sbin/nologin X nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/usr/sbin/nologin f1f138fb7855984e6f78605c705f594e echo x - gdnsd/pkg-plist sed 's/^X//' >gdnsd/pkg-plist << '09d21844b3ee73105e517ee3269eda3f' Xbin/gdnsd_geoip_test X@unexec if cmp -s %D/%%ETCDIR%%/config-dist %D/%%ETCDIR%%/config; then rm -f %D/%%ETCDIR%%/config; fi X%%ETCDIR%%/config-dist X@exec if [ ! -f %D/%%ETCDIR%%/config ] ; then cp -p %D/%F %B/config; fi X%%ETCDIR%%/example.com X@dirrmtry %%ETCDIR%% Xlib/gdnsd/libgdnsd.la Xlib/gdnsd/libgdnsd.so Xlib/gdnsd/plugin_geoip.la Xlib/gdnsd/plugin_geoip.so Xlib/gdnsd/plugin_http_status.la Xlib/gdnsd/plugin_http_status.so Xlib/gdnsd/plugin_metafo.la Xlib/gdnsd/plugin_metafo.so Xlib/gdnsd/plugin_multifo.la Xlib/gdnsd/plugin_multifo.so Xlib/gdnsd/plugin_null.la Xlib/gdnsd/plugin_null.so Xlib/gdnsd/plugin_reflect.la Xlib/gdnsd/plugin_reflect.so Xlib/gdnsd/plugin_simplefo.la Xlib/gdnsd/plugin_simplefo.so Xlib/gdnsd/plugin_static.la Xlib/gdnsd/plugin_static.so Xlib/gdnsd/plugin_tcp_connect.la Xlib/gdnsd/plugin_tcp_connect.so Xlib/gdnsd/plugin_weighted.la Xlib/gdnsd/plugin_weighted.so X@dirrm lib/gdnsd Xsbin/gdnsd X@exec mkdir -p %D/var/gdnsd X@dirrm var/gdnsd X@stopdaemon gdnsd 09d21844b3ee73105e517ee3269eda3f exit
Here is the shell archive as a text attachment. ---- Stefan Caunter E: stef@scaleengine.com Toronto: +1 647 459 9475 +1 800 224 0192
State Changed From-To: open->feedback build still failes http://tb.smeets.im/tb/index.php?action=describe_port&id=2052
# This is a shell archive. Save it in a file, remove anything before # this line, and then unpack it by entering "sh file". Note, it may # create directories; files and directories will be owned by you and # have default permissions. # # This archive contains: # # gdnsd # gdnsd/Makefile # gdnsd/pkg-descr # gdnsd/distinfo # gdnsd/files # gdnsd/files/gdnsd.sh.in # gdnsd/files/patch-docs-config.example # gdnsd/files/patch-GIDs.diff # gdnsd/files/patch-UIDs.diff # gdnsd/pkg-plist # echo c - gdnsd mkdir -p gdnsd > /dev/null 2>&1 echo x - gdnsd/Makefile sed 's/^X//' >gdnsd/Makefile << '1edfaa2afe1e0a6d8a87f2ad49aa3f4d' X# New ports collection makefile for: gdnsd X# Date created: Tue May 15, 2012 X# Whom: Stefan Caunter <stef@scaleengine.com> X# X# $FreeBSD$ X# X XPORTNAME= gdnsd XPORTVERSION= 1.6.7 XCATEGORIES= dns XMASTER_SITES= ${MASTER_SITE_GOOGLE_CODE} XMASTER_SITES+= http://gdnsd.scaleengine.net/gdnsd/ X XMAINTAINER= ports@scaleengine.com XCOMMENT= Authoritative-only GeoIP-aware DNS server X XLICENSE= GPLv3 X XOPTIONS= GEOIP "Enable GeoIP Support" off X X.include <bsd.port.options.mk> X XHAS_CONFIGURE= yes XMAKE_JOBS_SAFE= yes XUSE_LDCONFIG= yes X X.if !defined(NOPORTDOCS) XMAN1= gdnsd_geoip_test.1 XMAN3= gdnsd-plugin-api.3 XMAN5= gdnsd.config.5 XMAN5+= gdnsd.zonefile.5 XMAN8= gdnsd.8 XMAN8+= gdnsd-plugin-simplefo.8 XMAN8+= gdnsd-plugin-multifo.8 XMAN8+= gdnsd-plugin-metafo.8 XMAN8+= gdnsd-plugin-geoip.8 XMAN8+= gdnsd-plugin-weighted.8 XMANCOMPRESSED= no X.endif X XUSERS = gdnsd XGROUPS = gdnsd X XUSE_RC_SUBR= gdnsd.sh X XCONFIGURE_ARGS+= --mandir=${PREFIX}/man X X.if defined(WITH_GEOIP) XRUN_DEPENDS+= ${LOCALBASE}/share/GeoIP/GeoIP.dat:${PORTSDIR}/net/GeoIP X.endif X Xpost-install: X ${CP} ${WRKDIR}/${DISTNAME}/docs/config.example ${ETCDIR}/config-dist X @if [ ! -f ${ETCDIR}/config ]; then \ X ${CP} -p ${WRKDIR}/${DISTNAME}/docs/config.example ${ETCDIR}/config ; \ X fi X ${CP} ${WRKDIR}/${DISTNAME}/docs/example.com ${ETCDIR}/example.com X X.include <bsd.port.mk> 1edfaa2afe1e0a6d8a87f2ad49aa3f4d echo x - gdnsd/pkg-descr sed 's/^X//' >gdnsd/pkg-descr << 'ecde11a765ad52b4224419b2eba911ce' Xgdnsd is an Authoritative-only DNS server. XThe initial g stands for Geographic, as gdnsd offers a plugin system for Xgeographic (or other sorts of) balancing, redirection, and Xservice-state-conscious failover. If you don't care about that feature, it's Xstill quite good at being a very fast, lean, and resilient authoritative-only Xserver for static DNS data. X Xgdnsd is written in C using libev and pthreads with a focus on high Xperformance, low latency service. It does not offer any form of caching or Xrecursive service, and does not support DNSSEC. X XWWW: http://code.google.com/p/gdnsd/ ecde11a765ad52b4224419b2eba911ce echo x - gdnsd/distinfo sed 's/^X//' >gdnsd/distinfo << '790e7cd581b808e35aec58ea2dbf5396' XSHA256 (gdnsd-1.6.7.tar.gz) = 39bf9849a586564f60319e4012edc037633077780060a4f925c418871d6d8672 XSIZE (gdnsd-1.6.7.tar.gz) = 942433 790e7cd581b808e35aec58ea2dbf5396 echo c - gdnsd/files mkdir -p gdnsd/files > /dev/null 2>&1 echo x - gdnsd/files/gdnsd.sh.in sed 's/^X//' >gdnsd/files/gdnsd.sh.in << 'ac08c8242855da3a9001180ad6995aab' X#!/bin/sh X X# $FreeBSD$ X# X# PROVIDE: gdnsd X# REQUIRE: DAEMON X# REQUIRE: LOGIN X# KEYWORD: FreeBSD shutdown X# X# Add the following lines to /etc/rc.conf.local or /etc/rc.conf X# to enable this service: X# X# gdnsd_enable (bool): Set to NO by default. X# Set it to YES to enable gdnsd. X# gdnsd_config (path): Set to %%PREFIX%%/etc/gdnsd/config X# by default. X X. /etc/rc.subr X Xname="gdnsd" Xrcvar=`set_rcvar` Xcommand="%%PREFIX%%/sbin/gdnsd" X X# set defaults Xload_rc_config $name X: ${gdnsd_enable:="NO"} X: ${gdnsd_config="%%PREFIX%%/etc/gdnsd/config"} X: ${gdnsd_pidfile="%%PREFIX%%/var/run/gdnsd.pid"} X Xrequired_files=${gdnsd_config} Xcommand_args="-c ${gdnsd_config} start" Xprocname=${command} Xextra_commands="checkconf" Xcheckconf_cmd="gdnsd_checkconf" X Xstop_postcmd=stop_postcmd X Xstop_postcmd() X{ X rm -f ${gdnsd_pidfile} X} X Xgdnsd_checkconf() X{ X ${command} -c ${gdnsd_config} checkconf X} X Xrun_rc_command "$1" X ac08c8242855da3a9001180ad6995aab echo x - gdnsd/files/patch-docs-config.example sed 's/^X//' >gdnsd/files/patch-docs-config.example << '6a9f29be362b0a414c01fe39c589ee02' X--- config.example.orig 2012-05-06 20:26:34.000000000 +0000 X+++ docs/config.example 2012-05-25 20:13:28.000000000 +0000 X@@ -1,4 +1,14 @@ X- X # For more information on configuration, see "man gdnsd.config" X-options => { zones_default_ttl = 43200 } X+ X+options => { X+ username = gdnsd X+ zones_default_ttl = 3600 X+ http_port = 13506 X+ tcp_clients_per_socket = 256 X+ tcp_timeout = 8 X+ max_http_clients = 32 X+ priority = 0 X+ listen = 127.0.0.1 X+ http_listen = 127.0.0.1 X+} X zones => { example.com => { default_ttl = 86400 } } 6a9f29be362b0a414c01fe39c589ee02 echo x - gdnsd/files/patch-GIDs.diff sed 's/^X//' >gdnsd/files/patch-GIDs.diff << 'eb9458f44cc3e2ce683e6d1d7a5b917c' X--- GIDs.orig 2012-05-25 19:52:54.000000000 +0000 X+++ /usr/ports/GIDs 2012-05-25 19:52:48.000000000 +0000 X@@ -230,4 +230,5 @@ X _neubot:*:953: X hadoop:*:955: X pandora:*:956: X+gdnsd:*:957: X nobody:*:65534: eb9458f44cc3e2ce683e6d1d7a5b917c echo x - gdnsd/files/patch-UIDs.diff sed 's/^X//' >gdnsd/files/patch-UIDs.diff << 'f1f138fb7855984e6f78605c705f594e' X--- UIDs.orig 2012-05-25 19:52:39.000000000 +0000 X+++ /usr/ports/UIDs 2012-05-25 19:52:30.000000000 +0000 X@@ -233,4 +233,5 @@ X oops:*:954:65534::0:0:oops user:/nonexistent:/usr/sbin/nologin X hadoop:*:955:955::0:0:hadoop user:/nonexistent:/usr/sbin/nologin X pandora:*:956:956::0:0:Pandora FMS user:/usr/local/etc/pandora/home:/usr/sbin/nologin X+gdnsd:*:957:957::0:0:gdnsd user:/usr/local/etc/gdnsd:/usr/sbin/nologin X nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/usr/sbin/nologin f1f138fb7855984e6f78605c705f594e echo x - gdnsd/pkg-plist sed 's/^X//' >gdnsd/pkg-plist << '09d21844b3ee73105e517ee3269eda3f' Xbin/gdnsd_geoip_test X@unexec if cmp -s %D/%%ETCDIR%%/config-dist %D/%%ETCDIR%%/config; then rm -f %D/%%ETCDIR%%/config; fi X%%ETCDIR%%/config-dist X@exec if [ ! -f %D/%%ETCDIR%%/config ] ; then cp -p %D/%F %B/config; fi X%%ETCDIR%%/example.com X@dirrmtry %%ETCDIR%% Xinclude/gdnsd-compiler.h Xinclude/gdnsd-dmn.h Xinclude/gdnsd-dname.h Xinclude/gdnsd-ev.h Xinclude/gdnsd-log.h Xinclude/gdnsd-misc.h Xinclude/gdnsd-monio.h Xinclude/gdnsd-net.h Xinclude/gdnsd-plugapi.h Xinclude/gdnsd-plugin.h Xinclude/gdnsd-satom.h Xinclude/gdnsd-vscf.h X%%DOCSDIR%%/gdnsd-plugin-multifo.pod X%%DOCSDIR%%/gdnsd-plugin-geoip.pod X%%DOCSDIR%%/gdnsd-plugin-metafo.txt X%%DOCSDIR%%/gdnsd_geoip_test.pod X%%DOCSDIR%%/gdnsd-plugin-simplefo.txt X%%DOCSDIR%%/gdnsd.zonefile.pod X%%DOCSDIR%%/COPYING X%%DOCSDIR%%/gdnsd.config.pod X%%DOCSDIR%%/gdnsd_manual.pod X%%DOCSDIR%%/gdnsd.txt X%%DOCSDIR%%/gdnsd-plugin-api.pod X%%DOCSDIR%%/gdnsd-plugin-weighted.txt X%%DOCSDIR%%/AUTHORS X%%DOCSDIR%%/gdnsd-plugin-simplefo.pod X%%DOCSDIR%%/README X%%DOCSDIR%%/gdnsd_geoip_test.txt X%%DOCSDIR%%/gdnsd-plugin-metafo.pod X%%DOCSDIR%%/gdnsd-plugin-geoip.txt X%%DOCSDIR%%/gdnsd-plugin-multifo.txt X%%DOCSDIR%%/config.example X%%DOCSDIR%%/gdnsd.zonefile.txt X%%DOCSDIR%%/gdnsd_manual.txt X%%DOCSDIR%%/gdnsd.config.txt X%%DOCSDIR%%/example.com X%%DOCSDIR%%/gdnsd-plugin-api.txt X%%DOCSDIR%%/ChangeLog X%%DOCSDIR%%/gdnsd-plugin-weighted.pod X%%DOCSDIR%%/gdnsd.pod X%%DOCSDIR%%/INSTALL X%%PORTDOCS%%@dirrm %%DOCSDIR%% X%%PORTDOCS%%@unexec %D/%%DOCSDIR%% 2>/dev/null || true Xlib/gdnsd/libgdnsd.la Xlib/gdnsd/libgdnsd.so Xlib/gdnsd/plugin_geoip.la Xlib/gdnsd/plugin_geoip.so Xlib/gdnsd/plugin_http_status.la Xlib/gdnsd/plugin_http_status.so Xlib/gdnsd/plugin_metafo.la Xlib/gdnsd/plugin_metafo.so Xlib/gdnsd/plugin_multifo.la Xlib/gdnsd/plugin_multifo.so Xlib/gdnsd/plugin_null.la Xlib/gdnsd/plugin_null.so Xlib/gdnsd/plugin_reflect.la Xlib/gdnsd/plugin_reflect.so Xlib/gdnsd/plugin_simplefo.la Xlib/gdnsd/plugin_simplefo.so Xlib/gdnsd/plugin_static.la Xlib/gdnsd/plugin_static.so Xlib/gdnsd/plugin_tcp_connect.la Xlib/gdnsd/plugin_tcp_connect.so Xlib/gdnsd/plugin_weighted.la Xlib/gdnsd/plugin_weighted.so X@dirrm lib/gdnsd Xsbin/gdnsd X@exec mkdir -p %D/var/gdnsd X@dirrm var/gdnsd X@exec mkdir -p %D/etc/gdnsd X@dirrmtry etc/gdnsd X@stopdaemon gdnsd 09d21844b3ee73105e517ee3269eda3f exit
State Changed From-To: feedback->closed New port added, with minor changes. Thanks!
miwi 2012-06-09 15:47:57 UTC FreeBSD ports repository Modified files: dns Makefile Added files: dns/gdnsd Makefile distinfo pkg-descr pkg-plist dns/gdnsd/files gdnsd.in patch-docs-config.example Log: gdnsd is an Authoritative-only DNS server. The initial g stands for Geographic, as gdnsd offers a plugin system for geographic (or other sorts of) balancing, redirection, and service-state-conscious failover. If you don't care about that feature, it's still quite good at being a very fast, lean, and resilient authoritative-only server for static DNS data. gdnsd is written in C using libev and pthreads with a focus on highi performance, low latency service. It does not offer any form of caching or recursive service, and does not support DNSSEC. WWW: http://code.google.com/p/gdnsd/ PR: ports/167946 Submitted by: Stefan Caunter <stef@scaleengine.com> Revision Changes Path 1.156 +1 -0 ports/dns/Makefile 1.1 +50 -0 ports/dns/gdnsd/Makefile (new) 1.1 +2 -0 ports/dns/gdnsd/distinfo (new) 1.1 +49 -0 ports/dns/gdnsd/files/gdnsd.in (new) 1.1 +19 -0 ports/dns/gdnsd/files/patch-docs-config.example (new) 1.1 +12 -0 ports/dns/gdnsd/pkg-descr (new) 1.1 +77 -0 ports/dns/gdnsd/pkg-plist (new) _______________________________________________ cvs-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/cvs-all To unsubscribe, send any mail to "cvs-all-unsubscribe@freebsd.org"