Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 9DD63200B81 for ; Tue, 13 Sep 2016 17:25:42 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 9C608160AD2; Tue, 13 Sep 2016 15:25:42 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 4443B160AAA for ; Tue, 13 Sep 2016 17:25:41 +0200 (CEST) Received: (qmail 38445 invoked by uid 500); 13 Sep 2016 15:25:40 -0000 Mailing-List: contact dev-help@brooklyn.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@brooklyn.apache.org Delivered-To: mailing list dev@brooklyn.apache.org Received: (qmail 38429 invoked by uid 99); 13 Sep 2016 15:25:39 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd3-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 13 Sep 2016 15:25:39 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd3-us-west.apache.org (ASF Mail Server at spamd3-us-west.apache.org) with ESMTP id DE528188194 for ; Tue, 13 Sep 2016 15:25:38 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd3-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 3.181 X-Spam-Level: *** X-Spam-Status: No, score=3.181 tagged_above=-999 required=6.31 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=2, KAM_BADIPHTTP=2, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_PASS=-0.001, URIBL_DBL_ABUSE_REDIR=0.001, WEIRD_PORT=0.001] autolearn=disabled Authentication-Results: spamd3-us-west.apache.org (amavisd-new); dkim=pass (1024-bit key) header.d=cloudsoftcorp.com Received: from mx1-lw-us.apache.org ([10.40.0.8]) by localhost (spamd3-us-west.apache.org [10.40.0.10]) (amavisd-new, port 10024) with ESMTP id w91r93qlbuKp for ; Tue, 13 Sep 2016 15:25:35 +0000 (UTC) Received: from mail-wm0-f46.google.com (mail-wm0-f46.google.com [74.125.82.46]) by mx1-lw-us.apache.org (ASF Mail Server at mx1-lw-us.apache.org) with ESMTPS id 656645F296 for ; Tue, 13 Sep 2016 15:25:34 +0000 (UTC) Received: by mail-wm0-f46.google.com with SMTP id c131so118418701wmh.0 for ; Tue, 13 Sep 2016 08:25:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cloudsoftcorp.com; s=google; h=from:message-id:mime-version:subject:date:references:to:in-reply-to; bh=L5duB7D8JkGB/hZv3suD+lStBDfmtZy/+4+4gKRt5q4=; b=QriLgs2WSgl1kic5/Hy7Ed/RiRWWqQXKODSeCczyXzIXCZJI4+ajOzzh7sZhX48aYP U3J9eN+qSVKmnvWt1GEcA/ohoZyrZad8S+axjTwzzWeDXNCFYtAfMWIFAC3LjH4jAlYh 107ERnKtdpvsi6GjPEqtLP/1Zp89dcMu1rXFs= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:message-id:mime-version:subject:date :references:to:in-reply-to; bh=L5duB7D8JkGB/hZv3suD+lStBDfmtZy/+4+4gKRt5q4=; b=XO2IMGEfyHcUAtOKMHDXLkRib9ZEkauKiZy1bdSxAP+47nLOFyu+TRJpALFAA752gE qacq8hCkfMpVH04eLLPc79pqJJpA6DLJL2bH38yBoa29he3onYejUtEKrpFTFkxJkMfN fpSnsCRSPYFjEcbMAmp126ZunCaC80zgLolkUdz0GU5X+/ze1IXKrBaEJosb32X6DVwx jA5UOHn2LTcygfGaFYWeyhw/LfEbfEoPbrC+mWDY21vbymFqkafBb1q2KT9TYtJzOYWi +8ufqmMXmUo3LGxF8k1zVbvVfFW9lKlJ8aVBJOaefFfhVXXBJbuueur/uJS1S/SlkxNR ZgnQ== X-Gm-Message-State: AE9vXwM0dSYbgkWa9PnbgC4bgl9evDcQFfA12MN0K1ZHUuA/5krDdJv+MadX45KWFDaUnLdW6lWDIfA/OV7VT15ERriYn7sruPDnrrnOPWPcYx9CwOJgnKrgMJqE7rgT4C152Q== X-Received: by 10.28.198.206 with SMTP id w197mr1384792wmf.30.1473780326321; Tue, 13 Sep 2016 08:25:26 -0700 (PDT) Received: from [10.10.205.92] ([212.250.191.72]) by smtp.gmail.com with ESMTPSA id g7sm23447421wjx.10.2016.09.13.08.25.25 for (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 13 Sep 2016 08:25:25 -0700 (PDT) From: Geoff Macartney Content-Type: multipart/alternative; boundary="Apple-Mail=_6E1F1B66-3A58-4554-BDC8-B7989ED2BC87" Message-Id: <05EE9F03-569B-4CF6-A8AA-FE83B8D95B1C@cloudsoftcorp.com> Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\)) Subject: Re: [PROPOSAL] Remove unauthenticated localhost login Date: Tue, 13 Sep 2016 16:25:24 +0100 References: <78592469-a057-4b55-3686-075a4303fcfe@CloudsoftCorp.com> <12b9e6f5-5c46-1b11-76c0-5b510bb5e410@gmail.com> <04d6fb01-60f4-eeb3-28c7-4e59b65fb218@CloudsoftCorp.com> To: dev@brooklyn.apache.org In-Reply-To: X-Mailer: Apple Mail (2.3124) X-Legal-Virus-Advice: Whilst all reasonable care has been taken to avoid the transmission of viruses, it is the responsibility of the recipient to ensure that the onward transmission, opening or use of this message and any attachments will not adversely affect its systems or data. No responsibility is accepted by Cloudsoft Corporation Limited in this regard and the recipient should carry out such virus and other checks as it considers appropriate. X-Legal-Confidentiality: This e-mail message is confidential and for use by the addressee only. If the message is received by anyone other than the addressee, please return the message to the sender by replying to it and then delete the message from your computer. Internet e-mails are not necessarily secure. Cloudsoft Corporation Limited does not accept responsibility for changes made to this message after it was sent. X-Legal-Company-Info: Cloudsoft Corporation Limited. Registered in Scotland. Number: SC349230. Registered Office: 13 Dryden Place, Edinburgh, EH9 1RP. archived-at: Tue, 13 Sep 2016 15:25:42 -0000 --Apple-Mail=_6E1F1B66-3A58-4554-BDC8-B7989ED2BC87 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 hi Aled,=20 Have been mulling this over since this debate started, and I actually = like your =E2=80=98Alternative Proposal 2=E2=80=99 - out-of-the-box = there is no authentication. That would be a super-easy experience for first-time users. For admins = installing a production machine, they=E2=80=99ll always expect to have = to do some step to configure their own credentials, so we document how = to do that (and make it easy to do). As John said, by way of comparison, Jenkins takes this approach. This seems to me to be simpler and clearer than the first proposal. Just my two cents. Geoff =E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2= =80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80= =94=E2=80=94=E2=80=94=E2=80=94 Gnu PGP key - http://is.gd/TTTTuI > On 13 Sep 2016, at 15:32, Aled Sage wrote: >=20 > Hi all, >=20 > I still think we really need to change the status quo. For me, there = are two very compelling arguments: >=20 > 1. In karaf, it will always prompt for a username and password. > If running in localhost, you can enter any text and it will accept > it. But you do have to "log in". > 2. If running on a server, you need to find the auto-generated > username:password from the log or from stdout. >=20 > (1) is a bad user experience - the user doesn't know what to type, and = then it turns out that it is a pointless login dialog! It happens = because the login is controlled by the jaas configuration, which then = delegates to Brooklyn code for checking the given username and password. >=20 > For (2), I'd expect a fair number of users to go down this route. = Currently the Brooklyn docs are not good at telling you how to find this = username and password (partly because we have entirely different login = behaviour for localhost, vagrant and remote-server). We are also all in = agreement (I think) that it's a poor user experience. >=20 > --- > I'd like a consistent way for us to handle initial login on both = localhost and server (and vagrant) - one that we are happy for users to = experience, and for us to document well. >=20 > --- > _*New Proposal*_ >=20 > On initial connection via the web-console, it asks the server if there = is any security configuration options set. If there is not, the = web-console immediately re-directs the user to a page for creating the = initial user:password. Once submitted, the username and hash of the = password are written to $KARAF_HOME/etc/brooklyn.cfg for subsequent use. >=20 > Over time, we'd further improve this to allow someone to set up the = initial security configuration via this page (e.g. giving LDAP details, = etc). >=20 > _Implementation Considerations_ > Not sure of the details. It would be a bit fiddly, but hopefully not = too hard. >=20 > The web-console would need to do some initial requests to find out if = a new user needs to be created. It would then redirect, POST the = user-creation request, and automatically login with the new credentials. >=20 > Server-side, we'd need some way for an unauthenticated user to submit = the is-security-configured request and the initial-login-user-creation = request. If we continue to use the existing Karaf jaas configuration, = then the web-console could have submitted some garbage credentials so we = get into the Brooklyn code (perhaps with default entitlements ensuring = that all other access is forbidden); or we could have an unauthenticated = REST endpoint that would handle its own security checks - always = rejecting requests if any security configuration exists (which sounds = scary). >=20 > We'd need to extend the Brooklyn REST api for login-user-creation. >=20 > For now, it would write to the $KARAF_HOME/etc/brooklyn.cfg file. = Longer term, we could store the security config in the Brooklyn = persisted state. >=20 > We could also extend the Brooklyn CLI to support doing the = initial-login-user-creation. >=20 > --- > _*Alternative Proposal 1*_ > If consensus is that folk really love the default of = localhost-has-no-authentication, then we could look more into how to = configure Karaf jaas so that it doesn't prompt for a login. I personally = haven't been involved in that, so not sure how feasible/hard it is. >=20 > --- > _*Alternative Proposal 2*_ > We could make the default be unauthenticated (including disabling jaas = in the default config files). >=20 > Aled >=20 >=20 > On 08/09/2016 22:05, John McCabe wrote: >> By way of comparison, Jenkins deploys out of the box with no auth. >>=20 >> On Thu, 8 Sep 2016 at 21:11 Svetoslav Neykov < >> svetoslav.neykov@cloudsoftcorp.com> wrote: >>=20 >>> Letsencrypt (or any other certification) is a no go on localhost or = on >>> remotes where you don't know the domain name used to access it. >>> Browsers are moving slowly to a place where even plain http will = trigger >>> security warnings so self-signed won't be such a bad alternative at = that >>> point. >>>=20 >>> +1 for removing unauthenticated localhost access >>>=20 >>>>> Are you strongly against the status quo as well (given that the >>> password may be "buried" when installing on a server)? >>>> It has always been ugly but has struck me as the least ugly option. >>> Here's an alternative which has a better user experience with the = same >>> level of security. >>> When Brooklyn starts it sees that no password is configured so = generates >>> one (as it does currently) and puts it in brooklyn.properties or >>> etc/brooklyn.cfg (btw straightforward to implement in Karaf). The >>> documentation points the user to look for the password in that file = which >>> is very easy to do as the file is minimally populated at this point = - way >>> easier than sorting through a log file - always at the same line. = This has >>> the possitive effect that the password remains the same between = restarts. >>> It's been discussed already - don't remember what the cons were? >>>=20 >>>> Is there a way to pass metadata to rpm/deb? That would be nice, we >>> recommend running "yum install brooklyn -d admin.password=3Ds3cr3t" >>> That's no different from telling the user in docs to do "yum install >>> brooklyn && echo admin.password=3Ds3cr3t >> /etc/brooklyn.cfg". The = former >>> feels like magic, the latter self-documents how to change the = password at >>> any point. >>> As for the question itself - won't be surprised if passing an = environment >>> variable will let the postinstall script access it and do whatever = it needs >>> to (as a subshell to the current session). >>>=20 >>>=20 >>> Svet. >>>=20 >>>=20 >>>> On 8.09.2016 =D0=B3., at 22:18, John McCabe = wrote: >>>>=20 >>>> re: letsencrypt, their flow requires the node requesting the cert = be >>>> publicly accessible, a problem for getting started, but super = useful in >>>> most other cases. >>>>=20 >>>> On Thu, 8 Sep 2016 at 20:17 John McCabe = wrote: >>>>=20 >>>>> -1 on removing it unless it can be reproduced in some form for the >>> getting >>>>> started envs, the vagrant envs for example are local to the users = system >>>>> and don't need to be secured as they are *not* intended for use in = a >>>>> production capacity (perhaps worth adding a note pointing the user = to >>> the >>>>> section on securing a deploy (users/ssl etc)). The getting started = ask >>> on >>>>> the user should be absolutely minimal, even default passwords = aren't >>> great >>>>> UX in this context. >>>>>=20 >>>>> Alternatively I've seen flows where on a fresh install/first = startup you >>>>> are prompted to create an admin account when first accessing the = UI. I >>>>> would personally prefer that to default passwords (which is just = as >>>>> insecure as no password, maybe even less so). >>>>>=20 >>>>> ps. hello ::) >>>>>=20 >>>>> On Thu, 8 Sep 2016 at 17:19 Geoff Macartney < >>>>> geoff.macartney@cloudsoftcorp.com> wrote: >>>>>=20 >>>>>>> Is there a way to pass metadata to rpm/deb? That would be nice, = we >>>>>> recommend running "yum install brooklyn -d admin.password=3Ds3cr3t"= >>>>>>=20 >>>>>> as far as I understand that=E2=80=99s not possible. I think = there are >>>>>> workarounds but they go against the intent of RPM. >>>>>>=20 >>>>>>=20 >>>>>>=20 >>>>>>=20 >>>>>> =E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80= =94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94= =E2=80=94=E2=80=94=E2=80=94=E2=80=94 >>>>>> Gnu PGP key - http://is.gd/TTTTuI >>>>>>=20 >>>>>>=20 >>>>>>> On 8 Sep 2016, at 17:11, Alex Heneveld < >>> alex.heneveld@cloudsoftcorp.com> >>>>>> wrote: >>>>>>>=20 >>>>>>>> Are you strongly against the status quo as well (given that the >>>>>> password may be "buried" when installing on a server)? >>>>>>> It has always been ugly but has struck me as the least ugly = option. >>>>>>>=20 >>>>>>> Is there a way to pass metadata to rpm/deb? That would be nice, = we >>>>>> recommend running "yum install brooklyn -d admin.password=3Ds3cr3t"= >>>>>>>=20 >>>>>>> In general though I think this area of the product is good. >>>>>>>=20 >>>>>>>=20 >>>>>>>> HTTPS >>>>>>> This has also been mentioned and while I would like it in an = ideal >>>>>> world, the scare-the-daylights splash screen that browsers show = if you >>> have >>>>>> a self-signed cert is a compelling reason in my mind to adopt the = same >>>>>> philosophy, start easy and document security, rather than start = secure >>> but >>>>>> hard-to-use. >>>>>>>=20 >>>>>>> --A >>>>>>>=20 >>>>>>>=20 >>>>>>>=20 >>>>>>> On 08/09/2016 16:58, Aled Sage wrote: >>>>>>>> Hi Alex, >>>>>>>>=20 >>>>>>>> Good points. >>>>>>>>=20 >>>>>>>> Are you strongly against the status quo as well (given that the >>>>>> password may be "buried" when installing on a server)? >>>>>>>> --- >>>>>>>> It feels like your objections are mostly about the = auto-generated >>>>>> password, rather than about whether we have unauthenticating = localhost. >>>>>>>> Do you think we should change the behavior so that it sets up = an >>>>>> initial default well-known credential of admin:password (which we = log >>> and >>>>>> document), and have localhost login require the same = authentication? >>>>>>>> (I'd be hesitant about that, given the server may be publicly >>>>>> reachable and is opening an easily guessable password on a = predictable >>>>>> port.) >>>>>>>> However, that would give consistency for all ways of launching >>>>>> Brooklyn. There are several use-cases to consider: >>>>>>>> * Vagrant (we already auto-populate brooklyn.properties with >>>>>>>> admin:password, I believe). >>>>>>>> * Install on a server >>>>>>>> o using RPM/DEB >>>>>>>> o manually running karaf (with `./bin/start`) >>>>>>>> o manually running `./bin/brooklyn launch` >>>>>>>> * Install on localhost (using any of the three ways listed = above) >>>>>>>>=20 >>>>>>>> --- >>>>>>>> I was hoping to separate the work into two parts: making = localhost >>> and >>>>>> server behaviour consistent; and proper user/credential = management. >>>>>>>> Longer term, options include: >>>>>>>>=20 >>>>>>>> * Installing the rpm/deb doesn't start the service (giving the = user a >>>>>>>> chance to configure security first) >>>>>>>> * Force the user to change the initial password on first login, = etc. >>>>>>>>=20 >>>>>>>> Aled >>>>>>>>=20 >>>>>>>>=20 >>>>>>>> On 08/09/2016 16:09, Alex Heneveld wrote: >>>>>>>>> Aled- >>>>>>>>>=20 >>>>>>>>> I'm strongly against this. Nearly all OSS software puts a = priority >>>>>> of making it easy to get started, at the expense of = pre-configured >>> password >>>>>> (karaf's admin:admin) or no auth (most nosql datastores). The = good OSS >>>>>> software then describes clearly what's needed to make it secure. = I >>> think >>>>>> we do a pretty good job of both. >>>>>>>>> I'd welcome any install process tweak which encourages setting = a >>>>>> password in an easy way (and this would help vagrant) But I = think it's >>>>>> unacceptable for the default to be a password buried in a log = file ... >>> or >>>>>> anything which makes it significantly harder to get started. >>>>>>>>> (And do people really evaluate software on a shared server, in = this >>>>>> day and age???) >>>>>>>>> Best >>>>>>>>> Alex >>>>>>>>>=20 >>>>>>>>>=20 >>>>>>>>>=20 >>>>>>>>> On 08/09/2016 15:42, Aled Sage wrote: >>>>>>>>>> I'd expect a lot of folk evaluating Brooklyn for real = use-cases to >>>>>> install Brooklyn on a server, rather than their laptop owned by = their >>>>>> employer. Or for them to use Vagrant. >>>>>>>>>> For Vagrant, we can auto-populate it with an initial >>>>>> username:password in the brooklyn.properties file. >>>>>>>>>> And for Brooklyn on a server, I think we should taking = security >>>>>> seriously so not allow unauthenticated access from any user who = does a >>> curl >>>>>> command from that server! >>>>>>>>>> Aled >>>>>>>>>>=20 >>>>>>>>>>=20 >>>>>>>>>> On 08/09/2016 15:35, Aled Sage wrote: >>>>>>>>>>> Hi Mike, >>>>>>>>>>>=20 >>>>>>>>>>> That touches on a bigger piece of work: to look at the = runtime >>>>>> management of user logins (e.g. if using HA, how are the user >>> credentials >>>>>> shared with the other HA servers; where do we write to for = changes in >>>>>> credentials; etc). >>>>>>>>>>> We don't support changing user passwords on-the-fly (one has = to >>>>>> modify the brooklyn.properties file, and then trigger a reload = via the >>> rest >>>>>> api or ui). >>>>>>>>>>> Currently, for production use-cases we'd recommend use of >>> something >>>>>> like LDAP for that. We don't want to re-implement a lot of what = LDAP >>> does, >>>>>> but we do want a reasonable out-of-the-box experience. >>>>>>>>>>> Aled >>>>>>>>>>>=20 >>>>>>>>>>>=20 >>>>>>>>>>> On 08/09/2016 15:15, Mike Zaccardo wrote: >>>>>>>>>>>> +0. My hesitation is the con of more difficult first user >>>>>> experience. >>>>>>>>>>>> Could a compromise be that localhost login works = unauthenticated >>>>>> the first >>>>>>>>>>>> time but immediately prompts the user to set a username and >>>>>> password? >>>>>>>>>>>> On Thu, Sep 8, 2016 at 10:12 AM Aled Sage = >>>>>> wrote: >>>>>>>>>>>>> Hi all, >>>>>>>>>>>>>=20 >>>>>>>>>>>>> I'd like to remove from Brooklyn the feature where you can = login >>>>>>>>>>>>> authenticated from localhost. >>>>>>>>>>>>> _* >>>>>>>>>>>>> Current Situation*_ >>>>>>>>>>>>> When you first start Brooklyn on a new machine (so no >>>>>>>>>>>>> brooklyn.properties etc), it will auto-generate an initial >>>>>> username + >>>>>>>>>>>>> password and log that. For example: >>>>>>>>>>>>>=20 >>>>>>>>>>>>> 2016-09-08 15:03:48,631 INFO No security provider = options >>>>>>>>>>>>> specified. Define a security provider or users to = prevent a >>>>>> random >>>>>>>>>>>>> password being created and logged. >>>>>>>>>>>>> 2016-09-08 15:03:48,632 INFO Starting Brooklyn = web-console >>>>>> with >>>>>>>>>>>>> passwordless access on localhost and protected access = from >>>>>> any other >>>>>>>>>>>>> interfaces (no bind address specified) >>>>>>>>>>>>> 2016-09-08 15:03:48,633 INFO Allowing access to web = console >>>>>> from >>>>>>>>>>>>> localhost or with brooklyn:sgZZL9qqBd >>>>>>>>>>>>> 2016-09-08 15:03:50,572 INFO Started Brooklyn console = at >>>>>>>>>>>>> http://127.0.0.1:8083/, running = classpath://brooklyn.war@ >>>>>>>>>>>>>=20 >>>>>>>>>>>>> If you connect from localhost, you can login without any >>>>>> credentials. >>>>>>>>>>>>> If you connect from an external IP, you will need to use = those >>>>>> credentials. >>>>>>>>>>>>> _*Pros and Cons*_ >>>>>>>>>>>>> This is convenient for first-time users (they don't need = to >>> worry >>>>>> about >>>>>>>>>>>>> setting up a username/password if running Brooklyn on = their >>> local >>>>>>>>>>>>> machine). We have to explain a little less before they can = try >>>>>> out AMP. >>>>>>>>>>>>> But it will also feel like a security hole. >>>>>>>>>>>>>=20 >>>>>>>>>>>>> It will makes the experience of installing Brooklyn on a = server >>>>>> very >>>>>>>>>>>>> different from the localhost experience. This is = particularly >>>>>> true as we >>>>>>>>>>>>> encourage the use of RPM/DEB for installing Brooklyn. >>>>>>>>>>>>>=20 >>>>>>>>>>>>> _*Proposal*_ >>>>>>>>>>>>> I propose removing this, so localhost logins also require >>>>>> credentials. >>>>>>>>>>>>> We'd also ensure the docs point at the username:password = for >>>>>> accessing >>>>>>>>>>>>> the web-console. It is a problem that we don't already = call this >>>>>> out >>>>>>>>>>>>> (e.g. at >>>>>>>>>>>>>=20 >>>>>>>>>>>>>=20 >>> = http://brooklyn.apache.org/v/latest/start/running.html#control-apache-broo= klyn >>>>>>>>>>>>> and = http://brooklyn.apache.org/v/latest/ops/gui/running.html) >>>>>> because >>>>>>>>>>>>> users installing on a server will not know what to do. >>>>>>>>>>>>>=20 >>>>>>>>>>>>> Aled >>>>>>>>>>>>>=20 >>>>>>>>>>>>>=20 >>>>>>>>=20 >>>>>>=20 >>>=20 >=20 --Apple-Mail=_6E1F1B66-3A58-4554-BDC8-B7989ED2BC87--