Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 29 Jan 2014 11:46:59 +0000 (UTC)
From:      Martin Matuska <mm@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r341716 - in head/net: . foreman-proxy foreman-proxy/files
Message-ID:  <201401291146.s0TBkxSr020502@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mm
Date: Wed Jan 29 11:46:59 2014
New Revision: 341716
URL: http://svnweb.freebsd.org/changeset/ports/341716
QAT: https://qat.redports.org/buildarchive/r341716/

Log:
  The Foreman Smart Proxy is a project which provides a restful API to various
  sub-systems.
  
  Its goal is to provide API for a higher level orchestration tools (such as
  Foreman). The Smart proxy provides an easy way to add or extended existing
  subsystems and API's.
  
  Currently supported are:
  DHCP - ISC DHCP and MS DHCP Servers
  DNS - Bind and MS DNS Servers
  TFTP - any UNIX based tftp server
  Puppet - Any Puppet server from 0.24.x
  Puppet CA - Manage certificate signing, cleaning and autosign on a Puppet CA
              server
  BMC - BMC management etc
  
  WWW: http://theforeman.org

Added:
  head/net/foreman-proxy/
  head/net/foreman-proxy/Makefile   (contents, props changed)
  head/net/foreman-proxy/distinfo   (contents, props changed)
  head/net/foreman-proxy/files/
  head/net/foreman-proxy/files/foreman-proxy.in   (contents, props changed)
  head/net/foreman-proxy/files/patch-config-settings.yml.example   (contents, props changed)
  head/net/foreman-proxy/files/patch-lib-proxy-tftp.rb   (contents, props changed)
  head/net/foreman-proxy/files/patch-lib-sinatra-patch.rb   (contents, props changed)
  head/net/foreman-proxy/files/pkg-install.in   (contents, props changed)
  head/net/foreman-proxy/pkg-descr   (contents, props changed)
  head/net/foreman-proxy/pkg-plist   (contents, props changed)
Modified:
  head/net/Makefile

Modified: head/net/Makefile
==============================================================================
--- head/net/Makefile	Wed Jan 29 11:34:02 2014	(r341715)
+++ head/net/Makefile	Wed Jan 29 11:46:59 2014	(r341716)
@@ -134,6 +134,7 @@
     SUBDIR += findmtu
     SUBDIR += flowgrep
     SUBDIR += fonulator
+    SUBDIR += foreman-proxy
     SUBDIR += forg
     SUBDIR += fpc-ldap
     SUBDIR += fpc-pcap

Added: head/net/foreman-proxy/Makefile
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/net/foreman-proxy/Makefile	Wed Jan 29 11:46:59 2014	(r341716)
@@ -0,0 +1,91 @@
+# Created by: Martin Matuska <mm@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME=	foreman-proxy
+DISTVERSION=	1.4.0-RC2
+CATEGORIES=	net
+MASTER_SITES=	GH
+
+MAINTAINER=	mm@FreeBSD.org
+COMMENT=	Foreman Smart Proxy
+
+LICENSE=	GPLv3
+
+RUN_DEPENDS=    rubygem-sinatra>=1.4.3:${PORTSDIR}/www/rubygem-sinatra \
+		rubygem-json>=1.8.1:${PORTSDIR}/devel/rubygem-json
+
+OPTIONS_DEFINE= BMC PUPPET
+BMC_DESC=	Depend on rubyipmi for BMC support
+PUPPET_DESC=	Depend on Puppet
+
+USE_GITHUB=	yes
+GH_ACCOUNT=	theforeman
+GH_PROJECT=	smart-proxy
+GH_COMMIT= 	255c9bf
+USE_RUBY=	yes
+USE_RAKE=	yes
+USE_RC_SUBR=	foreman-proxy
+NO_BUILD=	yes
+PKGINSTALL=	${WRKDIR}/pkg-install
+
+FOREMAN_PROXY_USER?=	foreman_proxy
+FOREMAN_PROXY_GROUP?=	foreman_proxy
+FOREMAN_PROXY_LOGDIR?=	/var/log/foreman-proxy
+FOREMAN_PROXY_RUNDIR?=	/var/run/foreman-proxy
+
+USERS=		${FOREMAN_PROXY_USER}
+GROUPS=		${FOREMAN_PROXY_GROUP}
+
+SUB_FILES+=	pkg-install
+SUB_LIST+=	RUBY="${RUBY}" \
+		FOREMAN_PROXY_USER="${FOREMAN_PROXY_USER}" \
+		FOREMAN_PROXY_GROUP="${FOREMAN_PROXY_GROUP}" \
+		FOREMAN_PROXY_RUNDIR="${FOREMAN_PROXY_RUNDIR}" \
+		FOREMAN_PROXY_LOGDIR="${FOREMAN_PROXY_LOGDIR}"
+
+PLIST_SUB+=	${SUB_LIST} \
+		MKDIR="${MKDIR}"
+
+.include <bsd.port.options.mk>
+
+.if ${PORT_OPTIONS:MBMC}
+RUN_DEPENDS+=	rubygem-rubyipmi>=0.7:${PORTSDIR}/sysutils/rubygem-rubyipmi
+.endif
+
+.if ${PORT_OPTIONS:MPUPPET}
+RUN_DEPENDS+=	puppet:${PORTSDIR}/sysutils/puppet
+.endif
+
+.include <bsd.port.pre.mk>
+
+post-patch:
+	@${REINPLACE_CMD} \
+		-e "s|/usr/bin/env ruby|${RUBY}|g" \
+		-e "s|#{File.dirname(__FILE__)}/..|${DATADIR}|g" \
+		${WRKSRC}/bin/smart-proxy
+	@${REINPLACE_CMD} -e "s|%%PREFIX%%|${PREFIX}|g" \
+		-e "s|%%LOCALBASE%%|${LOCALBASE}|g" \
+		${WRKSRC}/config/settings.yml.example
+
+do-install:
+	@${MKDIR} ${STAGEDIR}${PREFIX}/etc/foreman-proxy
+	@${MKDIR} ${STAGEDIR}${DATADIR}
+	@${LN} -s ${PREFIX}/etc/foreman-proxy ${STAGEDIR}${DATADIR}/config
+	@${INSTALL_SCRIPT} ${WRKSRC}/bin/smart-proxy \
+		${STAGEDIR}${PREFIX}/sbin/smart-proxy
+.for file in Rakefile config.ru lib public views
+	@${CP} -r ${WRKSRC}/${file} ${STAGEDIR}${DATADIR}
+.endfor
+	@${INSTALL_DATA} ${WRKSRC}/config/settings.yml.example \
+		${STAGEDIR}${PREFIX}/etc/foreman-proxy/settings.yml.sample
+.if !exists(${STAGEDIR}${PREFIX}/etc/foreman-proxy/settings.yml)
+	@${INSTALL_DATA} ${WRKSRC}/config/settings.yml.example \
+		${STAGEDIR}${PREFIX}/etc/foreman-proxy/settings.yml
+.endif
+
+post-install:
+	@${MKDIR} -m 0700 ${STAGEDIR}${FOREMAN_PROXY_LOGDIR} \
+		${STAGEDIR}${FOREMAN_PROXY_RUNDIR}
+	@${SH} ${PKGINSTALL} STAGEDIR=${STAGEDIR}
+
+.include <bsd.port.post.mk>

Added: head/net/foreman-proxy/distinfo
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/net/foreman-proxy/distinfo	Wed Jan 29 11:46:59 2014	(r341716)
@@ -0,0 +1,2 @@
+SHA256 (foreman-proxy-1.4.0-RC2.tar.gz) = bbe0f3be114b8fb406e79fdd845690ad69d83915ccd1513fbc3deb71b894343a
+SIZE (foreman-proxy-1.4.0-RC2.tar.gz) = 84992

Added: head/net/foreman-proxy/files/foreman-proxy.in
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/net/foreman-proxy/files/foreman-proxy.in	Wed Jan 29 11:46:59 2014	(r341716)
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+# $FreeBSD$
+#
+# PROVIDE: foreman-proxy
+# BEFORE: LOGIN
+# KEYWORD: shutdown
+#
+# Add the following lines to /etc/rc.conf to enable foreman-proxy:
+# foreman_proxy_enable (bool):    Set to "NO" by default
+#                                 Set it to "YES" to enable nsca.
+. /etc/rc.subr
+
+name="foreman_proxy"
+rcvar="foreman_proxy_enable"
+
+command="%%PREFIX%%/sbin/smart-proxy"
+command_interpreter="%%RUBY%%"
+pidfile="%%FOREMAN_PROXY_RUNDIR%%/foreman-proxy.pid"
+
+foreman_proxy_enable=${foreman_proxy_enable:-"NO"}
+foreman_proxy_user=${foreman_proxy_user-"%%FOREMAN_PROXY_USER%%"}
+
+load_rc_config "${name}"
+
+required_files="%%PREFIX%%/etc/foreman-proxy/settings.yml"
+
+run_rc_command "$1"

Added: head/net/foreman-proxy/files/patch-config-settings.yml.example
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/net/foreman-proxy/files/patch-config-settings.yml.example	Wed Jan 29 11:46:59 2014	(r341716)
@@ -0,0 +1,90 @@
+--- config/settings.yml.example.orig	2014-01-28 19:55:58.769179974 +0100
++++ config/settings.yml.example	2014-01-28 20:06:51.840135157 +0100
+@@ -23,7 +23,7 @@
+ 
+ # Enable TFTP management
+ :tftp: false
+-:tftproot: /var/lib/tftpboot
++:tftproot: /tftpboot
+ # Defines the TFTP Servername to use, overrides the name in the subnet declaration
+ #:tftp_servername: tftp.domain.com
+ 
+@@ -35,14 +35,14 @@
+ #   nsupdate_gss (for GSS-TSIG support)
+ #   virsh (simple implementation for libvirt)
+ :dns_provider: nsupdate
+-#:dns_key: /etc/rndc.key
++#:dns_key: /usr/local/etc/namedb/rndc.key
+ # use this setting if you are managing a dns server which is not localhost though this proxy
+ #:dns_server: dns.domain.com
+ # use this setting if you want to override default TTL setting (86400)
+ #:dns_ttl: 86400
+ # use dns_tsig_* for GSS-TSIG updates using Kerberos.  Required for Windows MS DNS with
+ # Secure Dynamic Updates, or BIND as used in FreeIPA.  Set dns_provider to nsupdate_gss.
+-#:dns_tsig_keytab: /usr/share/foreman-proxy/dns.keytab
++#:dns_tsig_keytab: /usr/local/share/foreman-proxy/dns.keytab
+ #:dns_tsig_principal: DNS/host.example.com@EXAMPLE.COM
+ 
+ # Enable DHCP management
+@@ -55,15 +55,8 @@
+ # dhcp_subnets is a Native MS implementation setting. It restricts the subnets queried to a
+ # subset, so as to reduce the query time.
+ #:dhcp_subnets: [192.168.205.0/255.255.255.128, 192.168.205.128/255.255.255.128]
+-# Settings for Ubuntu ISC
+-#:dhcp_config: /etc/dhcp3/dhcpd.conf
+-#:dhcp_leases: /var/lib/dhcp3/dhcpd.leases
+-# Settings for Redhat ISC
+-# Redhat 5
+-#:dhcp_config: /etc/dhcpd.conf
+-# Redhat 6
+-#:dhcp_config: /etc/dhcp/dhcpd.conf
+-#:dhcp_leases: /var/lib/dhcpd/dhcpd.leases
++#:dhcp_config: %%LOCALBASE%%/etc/dhcpd.conf
++#:dhcp_leases: /var/db/dhcpd.leases
+ #:dhcp_key_name: secret_key_name
+ #:dhcp_key_secret: secret_key
+ 
+@@ -72,8 +65,8 @@
+ 
+ # enable PuppetCA management
+ :puppetca: false
+-#:ssldir: /var/lib/puppet/ssl
+-#:puppetdir: /etc/puppet
++#:ssldir: /var/puppet/ssl
++#:puppetdir: %%LOCALBASE%%/etc/puppet
+ 
+ # enable Puppet management
+ :puppet: false
+@@ -87,19 +80,19 @@
+ 
+ # customrun command details
+ # Set :customrun_cmd to the full path of the script you want to run, instead of /bin/false
+-:customrun_cmd: /bin/false
++:customrun_cmd: /usr/bin/false
+ # Set :customrun_args to any args you want to pass to your custom script. The hostname of the
+ # system to run against will be appended after the custom commands.
+ :customrun_args: -ay -f -s
+ 
+-:puppet_conf: /etc/puppet/puppet.conf
++:puppet_conf: %%LOCALBASE%%/etc/puppet/puppet.conf
+ # whether to use sudo before the ssh command
+ :puppetssh_sudo: false
+ # the command which will be sent to the host
+-:puppetssh_command: /usr/bin/puppet agent --onetime --no-usecacheonfailure
++:puppetssh_command: %%LOCALBASE%%/bin/puppet agent --onetime --no-usecacheonfailure
+ # With which user should the proxy connect
+ #:puppetssh_user: root
+-#:puppetssh_keyfile: /etc/foreman-proxy/id_rsa
++#:puppetssh_keyfile: %%PREFIX%%/etc/foreman-proxy/id_rsa
+ 
+ # Which user to invoke sudo as to run puppet commands
+ #:puppet_user: root
+@@ -111,7 +104,7 @@
+ # smart-proxy client node needs to have some admin right on chef-server
+ # in order to retrive all nodes public keys
+ # :chef_smartproxy_clientname: 'host.example.net'
+-# :chef_smartproxy_privatekey: '/etc/chef/client.pem'
++# :chef_smartproxy_privatekey: '%%LOCALBASE%%/etc/chef/client.pem'
+ 
+ # enable BMC management  (Bare metal power and bios controls)
+ # Available providers:

Added: head/net/foreman-proxy/files/patch-lib-proxy-tftp.rb
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/net/foreman-proxy/files/patch-lib-proxy-tftp.rb	Wed Jan 29 11:46:59 2014	(r341716)
@@ -0,0 +1,11 @@
+--- lib/proxy/tftp.rb.orig	2014-01-29 00:26:35.629061321 +0100
++++ lib/proxy/tftp.rb	2014-01-29 00:28:05.669054835 +0100
+@@ -104,7 +104,7 @@
+       # as the dst might contain another sub directory
+       FileUtils.mkdir_p destination.parent
+ 
+-      cmd = "wget --timeout=10 --tries=3 --no-check-certificate -nv -c #{src} -O \"#{destination}\""
++      cmd = "/usr/bin/fetch --timeout=10 -a --no-verify-hostname --no-verify-peer -a -m -o \"#{destination}\" #{src}"
+       Proxy::Util::CommandTask.new(cmd)
+     end
+   end

Added: head/net/foreman-proxy/files/patch-lib-sinatra-patch.rb
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/net/foreman-proxy/files/patch-lib-sinatra-patch.rb	Wed Jan 29 11:46:59 2014	(r341716)
@@ -0,0 +1,11 @@
+--- lib/sinatra-patch.rb.orig	2014-01-29 12:16:04.574127338 +0100
++++ lib/sinatra-patch.rb	2014-01-29 12:17:34.113121100 +0100
+@@ -17,7 +17,7 @@
+ 
+       puts "Starting Foreman Proxy on #{port} using #{handler_name}" unless handler_name =~/cgi/i
+ 
+-      FileUtils.mkdir_p(File.join(APP_ROOT, 'tmp/pids'))
++    # FileUtils.mkdir_p(File.join(APP_ROOT, 'tmp/pids'))
+ 
+       # Create the PID's parent directory if it doesn't exist yet.
+       if SETTINGS.daemon

Added: head/net/foreman-proxy/files/pkg-install.in
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/net/foreman-proxy/files/pkg-install.in	Wed Jan 29 11:46:59 2014	(r341716)
@@ -0,0 +1,19 @@
+#!/bin/sh
+# $FreeBSD$
+
+if [ "$2" != "POST-INSTALL" ]; then
+    exit 0
+fi
+
+USER=%%FOREMAN_PROXY_USER%%
+GROUP=%%FOREMAN_PROXY_GROUP%%
+LOGDIR=%%FOREMAN_PROXY_LOGDIR%%
+RUNDIR=%%FOREMAN_PROXY_RUNDIR%%
+
+echo "===> Changing owner and modes for \"${LOGDIR}\"."
+chown -R ${USER}:${GROUP} ${STAGEDIR}${LOGDIR}
+chmod -R go= ${STAGEDIR}${LOGDIR}
+
+echo "===> Changing owner and modes for \"${RUNDIR}\"."
+chown -R ${USER}:${GROUP} ${STAGEDIR}${RUNDIR}
+chmod -R go= ${STAGEDIR}${RUNDIR}

Added: head/net/foreman-proxy/pkg-descr
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/net/foreman-proxy/pkg-descr	Wed Jan 29 11:46:59 2014	(r341716)
@@ -0,0 +1,17 @@
+The Foreman Smart Proxy is a project which provides a restful API to various
+sub-systems.
+
+Its goal is to provide API for a higher level orchestration tools (such as
+Foreman). The Smart proxy provides an easy way to add or extended existing
+subsystems and API's.
+
+Currently supported are:
+DHCP - ISC DHCP and MS DHCP Servers
+DNS - Bind and MS DNS Servers
+TFTP - any UNIX based tftp server
+Puppet - Any Puppet server from 0.24.x
+Puppet CA - Manage certificate signing, cleaning and autosign on a Puppet CA
+            server
+BMC - BMC management etc
+
+WWW: http://theforeman.org

Added: head/net/foreman-proxy/pkg-plist
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/net/foreman-proxy/pkg-plist	Wed Jan 29 11:46:59 2014	(r341716)
@@ -0,0 +1,90 @@
+sbin/smart-proxy
+@unexec if cmp -s %D/etc/foreman-proxy/settings.yml %D/etc/foreman-proxy/settings.yml.sample; then rm -f %D/etc/foreman-proxy/settings.yml; fi
+etc/foreman-proxy/settings.yml.sample
+@exec [ -f %B/settings.yml ] || cp %B/%f %B/settings.yml
+%%DATADIR%%/Rakefile
+%%DATADIR%%/config.ru
+%%DATADIR%%/config
+%%DATADIR%%/lib/bmc_api.rb
+%%DATADIR%%/lib/checks.rb
+%%DATADIR%%/lib/chefproxy_api.rb
+%%DATADIR%%/lib/daemon.rb
+%%DATADIR%%/lib/dhcp_api.rb
+%%DATADIR%%/lib/dns_api.rb
+%%DATADIR%%/lib/facts_api.rb
+%%DATADIR%%/lib/features_api.rb
+%%DATADIR%%/lib/helpers.rb
+%%DATADIR%%/lib/proxy.rb
+%%DATADIR%%/lib/proxy/authentication.rb
+%%DATADIR%%/lib/proxy/bmc.rb
+%%DATADIR%%/lib/proxy/bmc/base.rb
+%%DATADIR%%/lib/proxy/bmc/ipmi.rb
+%%DATADIR%%/lib/proxy/bmc/shell.rb
+%%DATADIR%%/lib/proxy/chefproxy.rb
+%%DATADIR%%/lib/proxy/dhcp.rb
+%%DATADIR%%/lib/proxy/dhcp/monkey_patch_subnet.rb
+%%DATADIR%%/lib/proxy/dhcp/monkey_patches.rb
+%%DATADIR%%/lib/proxy/dhcp/record.rb
+%%DATADIR%%/lib/proxy/dhcp/record/lease.rb
+%%DATADIR%%/lib/proxy/dhcp/record/reservation.rb
+%%DATADIR%%/lib/proxy/dhcp/server.rb
+%%DATADIR%%/lib/proxy/dhcp/server/isc.rb
+%%DATADIR%%/lib/proxy/dhcp/server/ms.rb
+%%DATADIR%%/lib/proxy/dhcp/server/native_ms.rb
+%%DATADIR%%/lib/proxy/dhcp/server/virsh.rb
+%%DATADIR%%/lib/proxy/dhcp/subnet.rb
+%%DATADIR%%/lib/proxy/dns.rb
+%%DATADIR%%/lib/proxy/dns/default_dns_settings.rb
+%%DATADIR%%/lib/proxy/dns/dnscmd.rb
+%%DATADIR%%/lib/proxy/dns/nsupdate.rb
+%%DATADIR%%/lib/proxy/dns/nsupdate_gss.rb
+%%DATADIR%%/lib/proxy/dns/virsh.rb
+%%DATADIR%%/lib/proxy/error.rb
+%%DATADIR%%/lib/proxy/log.rb
+%%DATADIR%%/lib/proxy/puppet.rb
+%%DATADIR%%/lib/proxy/puppet/class_scanner.rb
+%%DATADIR%%/lib/proxy/puppet/class_scanner_eparser.rb
+%%DATADIR%%/lib/proxy/puppet/customrun.rb
+%%DATADIR%%/lib/proxy/puppet/default_puppet_settings.rb
+%%DATADIR%%/lib/proxy/puppet/environment.rb
+%%DATADIR%%/lib/proxy/puppet/initializer.rb
+%%DATADIR%%/lib/proxy/puppet/mcollective.rb
+%%DATADIR%%/lib/proxy/puppet/puppet_class.rb
+%%DATADIR%%/lib/proxy/puppet/puppet_ssh.rb
+%%DATADIR%%/lib/proxy/puppet/puppetrun.rb
+%%DATADIR%%/lib/proxy/puppet/salt.rb
+%%DATADIR%%/lib/proxy/puppetca.rb
+%%DATADIR%%/lib/proxy/settings.rb
+%%DATADIR%%/lib/proxy/tftp.rb
+%%DATADIR%%/lib/proxy/util.rb
+%%DATADIR%%/lib/proxy/validations.rb
+%%DATADIR%%/lib/proxy/virsh.rb
+%%DATADIR%%/lib/puppet_api.rb
+%%DATADIR%%/lib/puppetca_api.rb
+%%DATADIR%%/lib/sinatra-patch.rb
+%%DATADIR%%/lib/smart_proxy.rb
+%%DATADIR%%/lib/tftp_api.rb
+%%DATADIR%%/public/css/styles.css
+%%DATADIR%%/views/dhcp/index.erb
+%%DATADIR%%/views/dhcp/show.erb
+%%DATADIR%%/views/features/index.erb
+%%DATADIR%%/views/layout.erb
+@dirrm %%DATADIR%%/views/features
+@dirrm %%DATADIR%%/views/dhcp
+@dirrm %%DATADIR%%/views
+@dirrm %%DATADIR%%/public/css
+@dirrm %%DATADIR%%/public
+@dirrm %%DATADIR%%/lib/proxy/bmc
+@dirrm %%DATADIR%%/lib/proxy/dhcp/record
+@dirrm %%DATADIR%%/lib/proxy/dhcp/server
+@dirrm %%DATADIR%%/lib/proxy/dhcp
+@dirrm %%DATADIR%%/lib/proxy/dns
+@dirrm %%DATADIR%%/lib/proxy/puppet
+@dirrm %%DATADIR%%/lib/proxy
+@dirrm %%DATADIR%%/lib
+@dirrmtry %%DATADIR%%
+@dirrmtry etc/foreman-proxy
+@cwd /
+@exec %%MKDIR%% -m 0700 %%FOREMAN_PROXY_LOGDIR%% %%FOREMAN_PROXY_RUNDIR%%
+@unexec rmdir %%FOREMAN_PROXY_LOGDIR%% >/dev/null 2>&1 || :
+@unexec rmdir %%FOREMAN_PROXY_RUNDIR%% >/dev/null 2>&1 || :



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201401291146.s0TBkxSr020502>