)]}'
{"Dockerfile":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"3510ccd17f95e3e823b6adfb4a8cb03969c1db33","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    --db-name /home/rally/.rally.sqlite \u0026\u0026 \\"},{"line_number":23,"context_line":"  pip install -r optional-requirements.txt \u0026\u0026 \\"},{"line_number":24,"context_line":"  chmod -R u\u003drwX,go\u003drX /etc/rally \u0026\u0026 \\"},{"line_number":25,"context_line":"  mv doc /opt/rally/ \u0026\u0026 \\"},{"line_number":26,"context_line":"  mv certification /opt/rally \u0026\u0026 \\"},{"line_number":27,"context_line":"  mv samples /opt/rally/ \u0026\u0026 \\"},{"line_number":28,"context_line":"  rm -rf /tmp/* \u0026\u0026 \\"}],"source_content_type":"text/x-dockerfile","patch_set":4,"id":"7a740942_c16b7084","line":25,"updated":"2015-12-09 22:58:46.000000000","message":"why /opt/rally why not ~/sample ~/certification ~/docs ?","commit_id":"fa6a3097d57b5da0293e7a571f8af11cfa187f2b"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"27cce64f7eb0bf56b5a2e5a8b825b4f384edea0c","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    --db-name /home/rally/.rally.sqlite \u0026\u0026 \\"},{"line_number":23,"context_line":"  pip install -r optional-requirements.txt \u0026\u0026 \\"},{"line_number":24,"context_line":"  chmod -R u\u003drwX,go\u003drX /etc/rally \u0026\u0026 \\"},{"line_number":25,"context_line":"  mv doc /opt/rally/ \u0026\u0026 \\"},{"line_number":26,"context_line":"  mv certification /opt/rally \u0026\u0026 \\"},{"line_number":27,"context_line":"  mv samples /opt/rally/ \u0026\u0026 \\"},{"line_number":28,"context_line":"  rm -rf /tmp/* \u0026\u0026 \\"}],"source_content_type":"text/x-dockerfile","patch_set":4,"id":"5a710552_b979adfe","line":25,"in_reply_to":"7a740942_4e8a8f1c","updated":"2015-12-15 14:32:25.000000000","message":"Thx","commit_id":"fa6a3097d57b5da0293e7a571f8af11cfa187f2b"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"48fd3535d2495c2f6dc8f53baa72ce0c8f41d87c","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    --db-name /home/rally/.rally.sqlite \u0026\u0026 \\"},{"line_number":23,"context_line":"  pip install -r optional-requirements.txt \u0026\u0026 \\"},{"line_number":24,"context_line":"  chmod -R u\u003drwX,go\u003drX /etc/rally \u0026\u0026 \\"},{"line_number":25,"context_line":"  mv doc /opt/rally/ \u0026\u0026 \\"},{"line_number":26,"context_line":"  mv certification /opt/rally \u0026\u0026 \\"},{"line_number":27,"context_line":"  mv samples /opt/rally/ \u0026\u0026 \\"},{"line_number":28,"context_line":"  rm -rf /tmp/* \u0026\u0026 \\"}],"source_content_type":"text/x-dockerfile","patch_set":4,"id":"7a740942_4e8a8f1c","line":25,"in_reply_to":"7a740942_c16b7084","updated":"2015-12-14 15:21:06.000000000","message":"Also, why not:\n\n    ...\n    mv doc certification samples ~ \u0026\u0026 \\\n\n(Or wherever it gets put; the point is doing this in one command instead of three.)","commit_id":"fa6a3097d57b5da0293e7a571f8af11cfa187f2b"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"0edc7691b443e0412ed03b11e04c5bb11d01232c","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"# create rally user"},{"line_number":14,"context_line":"RUN useradd -u 65500 -m rally \u0026\u0026 \\"},{"line_number":15,"context_line":"  ln -s /usr/share/doc/rally/ /home/rally/rally-docs/"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"# install rally. the COPY command below frequently invalidates"},{"line_number":18,"context_line":"# subsequent cache"}],"source_content_type":"text/x-dockerfile","patch_set":6,"id":"5a710552_0bb7423a","line":15,"updated":"2015-12-15 15:01:39.000000000","message":"Since the docs are no longer in /usr/share/doc/rally, do we want to either remove this symlink, or change it to point to /opt/rally/doc?\n\nAlso, the trailing slash on /home/rally/rally-docs/ breaks this command. With the slash, ln tries to make a symlink named \"rally\" (i.e., the basename of the target) in the /home/rally/rally-docs/ directory, rather than making a symlink named /home/rally/rally-docs to the target.","commit_id":"b8bd00b74bd5bb3ed71c026c5b7402c8b53e00be"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"0edc7691b443e0412ed03b11e04c5bb11d01232c","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    --db-name /home/rally/.rally.sqlite \u0026\u0026 \\"},{"line_number":23,"context_line":"  pip install -r optional-requirements.txt \u0026\u0026 \\"},{"line_number":24,"context_line":"  chmod -R u\u003drwX,go\u003drX /etc/rally \u0026\u0026 \\"},{"line_number":25,"context_line":"  mv certification/ samples/ doc/ /opt/rally/ \u0026\u0026 \\"},{"line_number":26,"context_line":"  rm -rf /tmp/* \u0026\u0026 \\"},{"line_number":27,"context_line":"  apt-get -y remove \\"},{"line_number":28,"context_line":"    build-essential \\"}],"source_content_type":"text/x-dockerfile","patch_set":6,"id":"5a710552_3e383ed3","line":25,"updated":"2015-12-15 15:01:39.000000000","message":"/opt/rally doesn\u0027t exist yet. You need a \u0027mkdir /opt/rally\u0027 before this.","commit_id":"b8bd00b74bd5bb3ed71c026c5b7402c8b53e00be"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"0edc7691b443e0412ed03b11e04c5bb11d01232c","unresolved":false,"context_lines":[{"line_number":33,"context_line":"  apt-get -y autoremove \u0026\u0026 \\"},{"line_number":34,"context_line":"  apt-get clean"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"RUN echo \u0027[ ! -z \"$TERM\" -a -r /etc/motd ] \u0026\u0026 cat /etc/issue \u0026\u0026 cat /etc/motd\u0027 \\"},{"line_number":37,"context_line":"    \u003e\u003e /etc/bash.bashrc; echo \"Rally certification tasks, samples and docs allocate at /opt/rally/\"\\"},{"line_number":38,"context_line":"    \u003e /etc/motd"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-dockerfile","patch_set":6,"id":"5a710552_1e030244","line":36,"updated":"2015-12-15 15:01:39.000000000","message":"/etc/issue should be parsed by *getty, otherwise escape sequences in it show up literally and you get things like:\n\n    Ubuntu 14.04.2 LTS \\n \\l\n\nIn this case I think it\u0027d be better to just cat /etc/motd and not /etc/issue. If you want to cat both, just do: cat /etc/issue /etc/motd\n\nBut you don\u0027t check for the readability of /etc/issue, so if it somehow doesn\u0027t exist then the motd wouldn\u0027t get displayed either, so IMO the better solution is to just forget about /etc/issue.","commit_id":"b8bd00b74bd5bb3ed71c026c5b7402c8b53e00be"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"4ed4b987de0fea248590e3274f2f846c8d8862b1","unresolved":false,"context_lines":[{"line_number":34,"context_line":"  apt-get clean"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"RUN echo \u0027[ ! -z \"$TERM\" -a -r /etc/motd ] \u0026\u0026 cat /etc/issue \u0026\u0026 cat /etc/motd\u0027 \\"},{"line_number":37,"context_line":"    \u003e\u003e /etc/bash.bashrc; echo \"Rally certification tasks, samples and docs allocate at /opt/rally/\"\\"},{"line_number":38,"context_line":"    \u003e /etc/motd"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"VOLUME [\"/home/rally\"]"}],"source_content_type":"text/x-dockerfile","patch_set":6,"id":"5a710552_a81ceb13","line":37,"updated":"2015-12-15 16:32:13.000000000","message":"I prefer to be more user-friendly here. Let\u0027s write something like:\n\n   Welcome to Rally Docker container!\n   # your message here\n   Rally at readthedocs - http://rally.readthedocs.org\n   How to contribute - http://rally.readthedocs.org/en/latest/contribute.html\n   If you have any question, you can reach rally team by\n     * e-mail - just send your question to openstack-dev@lists.openstack.org with tag [Rally] in subject\n     * irc - \"#openstack-rally\" channel at freenode.net","commit_id":"b8bd00b74bd5bb3ed71c026c5b7402c8b53e00be"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"0edc7691b443e0412ed03b11e04c5bb11d01232c","unresolved":false,"context_lines":[{"line_number":34,"context_line":"  apt-get clean"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"RUN echo \u0027[ ! -z \"$TERM\" -a -r /etc/motd ] \u0026\u0026 cat /etc/issue \u0026\u0026 cat /etc/motd\u0027 \\"},{"line_number":37,"context_line":"    \u003e\u003e /etc/bash.bashrc; echo \"Rally certification tasks, samples and docs allocate at /opt/rally/\"\\"},{"line_number":38,"context_line":"    \u003e /etc/motd"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"VOLUME [\"/home/rally\"]"}],"source_content_type":"text/x-dockerfile","patch_set":6,"id":"5a710552_bebf4ecf","line":37,"updated":"2015-12-15 15:01:39.000000000","message":"s/allocate/are located/","commit_id":"b8bd00b74bd5bb3ed71c026c5b7402c8b53e00be"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"6beb553f83d4ff2e49999e159affae5c3f76a1a6","unresolved":false,"context_lines":[{"line_number":34,"context_line":"  apt-get clean"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"RUN echo \u0027[ ! -z \"$TERM\" -a -r /etc/motd ] \u0026\u0026 cat /etc/issue \u0026\u0026 cat /etc/motd\u0027 \\"},{"line_number":37,"context_line":"    \u003e\u003e /etc/bash.bashrc; echo \"Rally certification tasks, samples and docs allocate at /opt/rally/\"\\"},{"line_number":38,"context_line":"    \u003e /etc/motd"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"VOLUME [\"/home/rally\"]"}],"source_content_type":"text/x-dockerfile","patch_set":6,"id":"5a710552_4baea186","line":37,"in_reply_to":"5a710552_a81ceb13","updated":"2015-12-15 16:51:36.000000000","message":"s/any question/any questions/\ns/reach rally team/reach the Rally team/\n\nOtherwise looks good!","commit_id":"b8bd00b74bd5bb3ed71c026c5b7402c8b53e00be"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"9621e8c2c8345326a6bea862d10599e5136cfc4f","unresolved":false,"context_lines":[{"line_number":18,"context_line":"# subsequent cache"},{"line_number":19,"context_line":"COPY . /tmp/rally"},{"line_number":20,"context_line":"WORKDIR /tmp/rally"},{"line_number":21,"context_line":"RUN ./install_rally.sh --system --verbose --yes \\"},{"line_number":22,"context_line":"    --db-name /home/rally/.rally.sqlite \u0026\u0026 \\"},{"line_number":23,"context_line":"  pip install -r optional-requirements.txt \u0026\u0026 \\"},{"line_number":24,"context_line":"  chmod -R u\u003drwX,go\u003drX /etc/rally \u0026\u0026 \\"}],"source_content_type":"text/x-dockerfile","patch_set":7,"id":"3a7e1126_6c92db59","line":21,"updated":"2015-12-16 20:55:50.000000000","message":"When I try to build the container, I find that I need to add *another* \u0027apt-get update\u0027 here before running install_rally.sh. Is that just me, or do you have this issue too?","commit_id":"84cdb8824be1ebe9d0fb07c63b368ad7c6a865f4"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"3fd109bc690f6553d3ff39fa834a028ed8051156","unresolved":false,"context_lines":[{"line_number":18,"context_line":"# subsequent cache"},{"line_number":19,"context_line":"COPY . /tmp/rally"},{"line_number":20,"context_line":"WORKDIR /tmp/rally"},{"line_number":21,"context_line":"RUN ./install_rally.sh --system --verbose --yes \\"},{"line_number":22,"context_line":"    --db-name /home/rally/.rally.sqlite \u0026\u0026 \\"},{"line_number":23,"context_line":"  pip install -r optional-requirements.txt \u0026\u0026 \\"},{"line_number":24,"context_line":"  chmod -R u\u003drwX,go\u003drX /etc/rally \u0026\u0026 \\"}],"source_content_type":"text/x-dockerfile","patch_set":7,"id":"3a7e1126_bc9c1f5e","line":21,"in_reply_to":"3a7e1126_6c92db59","updated":"2015-12-17 17:07:51.000000000","message":"The same here. I\u0027m using --no-cache as workaround.","commit_id":"84cdb8824be1ebe9d0fb07c63b368ad7c6a865f4"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"9621e8c2c8345326a6bea862d10599e5136cfc4f","unresolved":false,"context_lines":[{"line_number":23,"context_line":"  pip install -r optional-requirements.txt \u0026\u0026 \\"},{"line_number":24,"context_line":"  chmod -R u\u003drwX,go\u003drX /etc/rally \u0026\u0026 \\"},{"line_number":25,"context_line":"  mkdir /opt/rally/ \u0026\u0026 \\"},{"line_number":26,"context_line":"  mv certification/ samples/ doc/ /opt/rally/ \u0026\u0026 \\"},{"line_number":27,"context_line":"  rm -rf /tmp/* \u0026\u0026 \\"},{"line_number":28,"context_line":"  apt-get -y remove \\"},{"line_number":29,"context_line":"    build-essential \\"}],"source_content_type":"text/x-dockerfile","patch_set":7,"id":"3a7e1126_6cf65bd9","line":26,"updated":"2015-12-16 20:55:50.000000000","message":"Permissions on these directories is wrong once they get copied; they\u0027re 0700, owned by root, so the \u0027rally\u0027 user can\u0027t read them.","commit_id":"84cdb8824be1ebe9d0fb07c63b368ad7c6a865f4"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"828c29c9072d794eb3b0a681028911be53c43109","unresolved":false,"context_lines":[{"line_number":23,"context_line":"  pip install -r optional-requirements.txt \u0026\u0026 \\"},{"line_number":24,"context_line":"  chmod -R u\u003drwX,go\u003drX /etc/rally \u0026\u0026 \\"},{"line_number":25,"context_line":"  mkdir /opt/rally/ \u0026\u0026 \\"},{"line_number":26,"context_line":"  mv certification/ samples/ doc/ /opt/rally/ \u0026\u0026 \\"},{"line_number":27,"context_line":"  rm -rf /tmp/* \u0026\u0026 \\"},{"line_number":28,"context_line":"  apt-get -y remove \\"},{"line_number":29,"context_line":"    build-essential \\"}],"source_content_type":"text/x-dockerfile","patch_set":7,"id":"3a7e1126_6b9d5dbb","line":26,"in_reply_to":"3a7e1126_6cf65bd9","updated":"2015-12-18 14:02:53.000000000","message":"Done","commit_id":"84cdb8824be1ebe9d0fb07c63b368ad7c6a865f4"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"9621e8c2c8345326a6bea862d10599e5136cfc4f","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"RUN echo \u0027[ ! -z \"$TERM\" -a -r /etc/motd ] \u0026\u0026 cat /etc/motd\u0027 \\"},{"line_number":38,"context_line":"    \u003e\u003e /etc/bash.bashrc; echo \"Welcome to Rally Docker container!"},{"line_number":39,"context_line":"Rally certification tasks, samples and docs are locate at /opt/rally/"},{"line_number":40,"context_line":"Rally at readthedocs - http://rally.readthedocs.org"},{"line_number":41,"context_line":"How to contribute - http://rally.readthedocs.org/en/latest/contribute.html"},{"line_number":42,"context_line":"If you have any questions, you can reach the Rally team by:"}],"source_content_type":"text/x-dockerfile","patch_set":7,"id":"3a7e1126_ccb98fee","line":39,"updated":"2015-12-16 20:55:50.000000000","message":"s/locate/located/","commit_id":"84cdb8824be1ebe9d0fb07c63b368ad7c6a865f4"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"828c29c9072d794eb3b0a681028911be53c43109","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"RUN echo \u0027[ ! -z \"$TERM\" -a -r /etc/motd ] \u0026\u0026 cat /etc/motd\u0027 \\"},{"line_number":38,"context_line":"    \u003e\u003e /etc/bash.bashrc; echo \"Welcome to Rally Docker container!"},{"line_number":39,"context_line":"Rally certification tasks, samples and docs are locate at /opt/rally/"},{"line_number":40,"context_line":"Rally at readthedocs - http://rally.readthedocs.org"},{"line_number":41,"context_line":"How to contribute - http://rally.readthedocs.org/en/latest/contribute.html"},{"line_number":42,"context_line":"If you have any questions, you can reach the Rally team by:"}],"source_content_type":"text/x-dockerfile","patch_set":7,"id":"3a7e1126_cb5d7116","line":39,"in_reply_to":"3a7e1126_ccb98fee","updated":"2015-12-18 14:02:53.000000000","message":"Done","commit_id":"84cdb8824be1ebe9d0fb07c63b368ad7c6a865f4"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"9621e8c2c8345326a6bea862d10599e5136cfc4f","unresolved":false,"context_lines":[{"line_number":40,"context_line":"Rally at readthedocs - http://rally.readthedocs.org"},{"line_number":41,"context_line":"How to contribute - http://rally.readthedocs.org/en/latest/contribute.html"},{"line_number":42,"context_line":"If you have any questions, you can reach the Rally team by:"},{"line_number":43,"context_line":"  * e-mail - just send your question to openstack-dev@lists.openstack.org with tag [Rally] in subject"},{"line_number":44,"context_line":"  * irc - \"#openstack-rally\" channel at freenode.net\"\\"},{"line_number":45,"context_line":"  \u003e /etc/motd"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-dockerfile","patch_set":7,"id":"3a7e1126_2cee13ed","line":43,"updated":"2015-12-16 20:55:50.000000000","message":"It\u0027d be nice if we could shorten or wrap this line so it looks good when it\u0027s echoed out in an 80-column terminal.","commit_id":"84cdb8824be1ebe9d0fb07c63b368ad7c6a865f4"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"828c29c9072d794eb3b0a681028911be53c43109","unresolved":false,"context_lines":[{"line_number":40,"context_line":"Rally at readthedocs - http://rally.readthedocs.org"},{"line_number":41,"context_line":"How to contribute - http://rally.readthedocs.org/en/latest/contribute.html"},{"line_number":42,"context_line":"If you have any questions, you can reach the Rally team by:"},{"line_number":43,"context_line":"  * e-mail - just send your question to openstack-dev@lists.openstack.org with tag [Rally] in subject"},{"line_number":44,"context_line":"  * irc - \"#openstack-rally\" channel at freenode.net\"\\"},{"line_number":45,"context_line":"  \u003e /etc/motd"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-dockerfile","patch_set":7,"id":"3a7e1126_ab6025d0","line":43,"in_reply_to":"3a7e1126_2cee13ed","updated":"2015-12-18 14:02:53.000000000","message":"Done","commit_id":"84cdb8824be1ebe9d0fb07c63b368ad7c6a865f4"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"9621e8c2c8345326a6bea862d10599e5136cfc4f","unresolved":false,"context_lines":[{"line_number":42,"context_line":"If you have any questions, you can reach the Rally team by:"},{"line_number":43,"context_line":"  * e-mail - just send your question to openstack-dev@lists.openstack.org with tag [Rally] in subject"},{"line_number":44,"context_line":"  * irc - \"#openstack-rally\" channel at freenode.net\"\\"},{"line_number":45,"context_line":"  \u003e /etc/motd"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"VOLUME [\"/home/rally\"]"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-dockerfile","patch_set":7,"id":"3a7e1126_8cdce747","line":45,"updated":"2015-12-16 20:55:50.000000000","message":"Quoting on this is pretty messed up (and doesn\u0027t work). I\u0027d suggest using a heredoc instead:\n\n    RUN echo \u0027[ ! -z \"$TERM\" -a -r /etc/motd ] \u0026\u0026 cat /etc/motd\u0027 \\\n        \u003e\u003e /etc/bash.bashrc; cat \u003c\u003cEOF\n    Welcome to Rally Docker container!\n    Rally certification tasks, samples and docs are locate at /opt/rally/\n    Rally at readthedocs - http://rally.readthedocs.org\n    How to contribute - http://rally.readthedocs.org/en/latest/contribute.html\n    If you have any questions, you can reach the Rally team by:\n      * e-mail - just send your question to openstack-dev@lists.openstack.org with tag [Rally] in subject\n      * irc - \"#openstack-rally\" channel at freenode.net\nEOF \u003e /etc/motd","commit_id":"84cdb8824be1ebe9d0fb07c63b368ad7c6a865f4"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"828c29c9072d794eb3b0a681028911be53c43109","unresolved":false,"context_lines":[{"line_number":42,"context_line":"If you have any questions, you can reach the Rally team by:"},{"line_number":43,"context_line":"  * e-mail - just send your question to openstack-dev@lists.openstack.org with tag [Rally] in subject"},{"line_number":44,"context_line":"  * irc - \"#openstack-rally\" channel at freenode.net\"\\"},{"line_number":45,"context_line":"  \u003e /etc/motd"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"VOLUME [\"/home/rally\"]"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-dockerfile","patch_set":7,"id":"3a7e1126_0b6859b8","line":45,"in_reply_to":"3a7e1126_8cdce747","updated":"2015-12-18 14:02:53.000000000","message":"Done","commit_id":"84cdb8824be1ebe9d0fb07c63b368ad7c6a865f4"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"2cc44507abd3bfa41313c2f1d8771e49b5e5b592","unresolved":false,"context_lines":[{"line_number":23,"context_line":"  pip install -r optional-requirements.txt \u0026\u0026 \\"},{"line_number":24,"context_line":"  mkdir /opt/rally/ \u0026\u0026 \\"},{"line_number":25,"context_line":"  chmod -R u\u003drwX,go\u003drX /opt/rally /etc/rally \u0026\u0026 \\"},{"line_number":26,"context_line":"  mv certification/ samples/ doc/ /opt/rally/ \u0026\u0026 \\"},{"line_number":27,"context_line":"  rm -rf /tmp/* \u0026\u0026 \\"},{"line_number":28,"context_line":"  apt-get -y remove \\"},{"line_number":29,"context_line":"    build-essential \\"}],"source_content_type":"text/x-dockerfile","patch_set":8,"id":"3a7e1126_712d4afd","line":26,"updated":"2015-12-18 14:58:59.000000000","message":"The chmod needs to come after the mv, or permissions don\u0027t get set correctly.","commit_id":"a06d93d712eb28a99ccac4732d08e3badfef4af8"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"2cc44507abd3bfa41313c2f1d8771e49b5e5b592","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    If you have any questions, you can reach the Rally team by:"},{"line_number":44,"context_line":"      * e-mail - openstack-dev@lists.openstack.org with tag [Rally] in subject"},{"line_number":45,"context_line":"      * irc - \"#openstack-rally\" channel at freenode.net"},{"line_number":46,"context_line":"EOF \u003e /etc/motd"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"VOLUME [\"/home/rally\"]"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-dockerfile","patch_set":8,"id":"3a7e1126_318102c4","line":46,"updated":"2015-12-18 14:58:59.000000000","message":"Turns out that heredocs in Dockerfiles are kind of disasters. This was a bad suggestion and I apologize. The only way I can figure out how to do this is with echo -e:\n\n    RUN echo \u0027[ ! -z \"$TERM\" -a -r /etc/motd ] \u0026\u0026 cat /etc/motd\u0027 \\\n            \u003e\u003e /etc/bash.bashrc; echo -e \u0027Welcome to Rally Docker container!\\n\\\n    Rally certification tasks, samples and docs are located at /opt/rally/\\n\\\n    Rally at readthedocs - http://rally.readthedocs.org\\n\\\n    How to contribute - http://rally.readthedocs.org/en/latest/contribute.html\\n\\\n    If you have any questions, you can reach the Rally team by:\\n\\\n      * e-mail - openstack-dev@lists.openstack.org with tag [Rally] in subject\\n\\\n      * irc - \"#openstack-rally\" channel at freenode.net\u0027 \u003e /etc/motd\n\nGetting a newline into a RUN command is interesting.","commit_id":"a06d93d712eb28a99ccac4732d08e3badfef4af8"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"a42befb25e6782b36ff0e579cdfa7a89505f13ce","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    If you have any questions, you can reach the Rally team by:"},{"line_number":44,"context_line":"      * e-mail - openstack-dev@lists.openstack.org with tag [Rally] in subject"},{"line_number":45,"context_line":"      * irc - \"#openstack-rally\" channel at freenode.net"},{"line_number":46,"context_line":"EOF \u003e /etc/motd"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"VOLUME [\"/home/rally\"]"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-dockerfile","patch_set":8,"id":"3a7e1126_147dcab0","line":46,"in_reply_to":"3a7e1126_318102c4","updated":"2015-12-18 17:35:32.000000000","message":"That why firstly I want to echo-ed one line msg\u003d)","commit_id":"a06d93d712eb28a99ccac4732d08e3badfef4af8"}]}
