)]}'
{"doc/source/s2aio.rst":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"9d41ab79dd19eec077c7b870ff4a495fec942cc0","unresolved":false,"context_lines":[{"line_number":5,"context_line":"The script allows to do the installation either on the host"},{"line_number":6,"context_line":"where it is invoked or in a Docker container."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"To install on the host: "},{"line_number":9,"context_line":""},{"line_number":10,"context_line":".. include:: s2aio_dev_host_include.rst"},{"line_number":11,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a3c09a3_00c0b2df","line":8,"range":{"start_line":8,"start_character":23,"end_line":8,"end_character":24},"updated":"2017-01-14 18:32:48.000000000","message":"(nit) We can remove this","commit_id":"71dc6f21ed04494800fa7d4de34978955578ce75"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"9d41ab79dd19eec077c7b870ff4a495fec942cc0","unresolved":false,"context_lines":[{"line_number":12,"context_line":"To install in a Docker container follow the same steps,"},{"line_number":13,"context_line":"replacing the last command with:"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":":: "},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    ./s2aio.sh install dev docker"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a3c09a3_20b76e87","line":15,"range":{"start_line":15,"start_character":2,"end_line":15,"end_character":3},"updated":"2017-01-14 18:32:48.000000000","message":"(nit) ditto","commit_id":"71dc6f21ed04494800fa7d4de34978955578ce75"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"53522438854e380b3ad7d1e0b8438e98956d9f89","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"For the Swift data, the s2aio installation uses a loopback device over a .img file."},{"line_number":41,"context_line":"When shutting down the host, the .img file may get corrupted. Thus, the above stop and"},{"line_number":42,"context_line":"start commands are useful when using s2aio.sh for in a long lived hosts that can get rebooted"},{"line_number":43,"context_line":"from time to time."}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f044301_eb6796e8","line":43,"range":{"start_line":42,"start_character":50,"end_line":43,"end_character":18},"updated":"2017-05-11 20:45:05.000000000","message":"possibly it\u0027s worth to write down what\u0027s going on about the stored data (deleted? still there?) when rebooting with s2aio.sh start/stop.","commit_id":"f912dbeb6b4b2172650738e8b9e22519c7971e43"}],"s2aio.sh":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"9d41ab79dd19eec077c7b870ff4a495fec942cc0","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    swift-init --run-dir /opt/stack/data/swift/run/ all start"},{"line_number":21,"context_line":"    /usr/local/bin/uwsgi /etc/keystone/keystone-uwsgi-public.ini \u0026\u003e /dev/null \u0026"},{"line_number":22,"context_line":"    /usr/local/bin/uwsgi /etc/keystone/keystone-uwsgi-admin.ini \u0026\u003e /dev/null \u0026"},{"line_number":23,"context_line":"    exit 0"},{"line_number":24,"context_line":"}"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"stop_s2aio() {"}],"source_content_type":"text/x-sh","patch_set":4,"id":"7a3c09a3_a0ab5e1c","line":23,"range":{"start_line":23,"start_character":4,"end_line":23,"end_character":10},"updated":"2017-01-14 18:32:48.000000000","message":"I think it\u0027s better to return no-zero value when some of the starting command fail.","commit_id":"71dc6f21ed04494800fa7d4de34978955578ce75"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"9d41ab79dd19eec077c7b870ff4a495fec942cc0","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        ssh-keygen -q -t rsa -f ~/.ssh/id_rsa -N \"\""},{"line_number":44,"context_line":"    fi"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    # TODO: move gcc to swift-installation"},{"line_number":47,"context_line":"    #sudo apt-get install -y gcc --force-yes"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    if [ \"$TARGET\" \u003d\u003d \"docker\" ]; then"},{"line_number":50,"context_line":"        # install docker"}],"source_content_type":"text/x-sh","patch_set":4,"id":"7a3c09a3_40ec7a8f","line":47,"range":{"start_line":46,"start_character":4,"end_line":47,"end_character":44},"updated":"2017-01-14 18:32:48.000000000","message":"Can we remove these lines?","commit_id":"71dc6f21ed04494800fa7d4de34978955578ce75"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"9d41ab79dd19eec077c7b870ff4a495fec942cc0","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    #sudo apt-get install -y gcc --force-yes"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    if [ \"$TARGET\" \u003d\u003d \"docker\" ]; then"},{"line_number":50,"context_line":"        # install docker"},{"line_number":51,"context_line":"        sudo apt-get install apt-transport-https aufs-tools\u003d1:3.2+20130722-1.1 linux-image-extra-`uname -r` -y --force-yes"},{"line_number":52,"context_line":"        sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D"},{"line_number":53,"context_line":"        sudo sh -c \"echo deb https://apt.dockerproject.org/repo ubuntu-trusty main \u003e /etc/apt/sources.list.d/docker.list\""}],"source_content_type":"text/x-sh","patch_set":4,"id":"7a3c09a3_0099921f","line":50,"range":{"start_line":50,"start_character":8,"end_line":50,"end_character":24},"updated":"2017-01-14 18:32:48.000000000","message":"As the installation function is a little too long, I\u0027d like to have sub functions like s2aio_install_docker and s2aio_install_host.","commit_id":"71dc6f21ed04494800fa7d4de34978955578ce75"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"9d41ab79dd19eec077c7b870ff4a495fec942cc0","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        sudo service docker restart"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        # run the swift docker container"},{"line_number":60,"context_line":"        S2AIO_RUNNING\u003d`sudo docker ps | grep s2aio | wc -l`"},{"line_number":61,"context_line":"        S2AIO_EXISTS\u003d`sudo docker ps -a | grep s2aio | wc -l`"},{"line_number":62,"context_line":"        if [ \"$S2AIO_RUNNING\" \u003d\u003d \"0\" ]; then"},{"line_number":63,"context_line":"            if [ \"$S2AIO_EXISTS\" \u003d\u003d \"1\" ]; then"}],"source_content_type":"text/x-sh","patch_set":4,"id":"7a3c09a3_608a56c1","line":60,"range":{"start_line":60,"start_character":40,"end_line":60,"end_character":58},"updated":"2017-01-14 18:32:48.000000000","message":"(nit) we can just use \u0027grep -c s2aio\u0027","commit_id":"71dc6f21ed04494800fa7d4de34978955578ce75"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"9d41ab79dd19eec077c7b870ff4a495fec942cc0","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        # run the swift docker container"},{"line_number":60,"context_line":"        S2AIO_RUNNING\u003d`sudo docker ps | grep s2aio | wc -l`"},{"line_number":61,"context_line":"        S2AIO_EXISTS\u003d`sudo docker ps -a | grep s2aio | wc -l`"},{"line_number":62,"context_line":"        if [ \"$S2AIO_RUNNING\" \u003d\u003d \"0\" ]; then"},{"line_number":63,"context_line":"            if [ \"$S2AIO_EXISTS\" \u003d\u003d \"1\" ]; then"},{"line_number":64,"context_line":"                 sudo docker rm s2aio"}],"source_content_type":"text/x-sh","patch_set":4,"id":"7a3c09a3_808582ae","line":61,"range":{"start_line":61,"start_character":42,"end_line":61,"end_character":60},"updated":"2017-01-14 18:32:48.000000000","message":"(nit) ditto","commit_id":"71dc6f21ed04494800fa7d4de34978955578ce75"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"9d41ab79dd19eec077c7b870ff4a495fec942cc0","unresolved":false,"context_lines":[{"line_number":147,"context_line":"fi"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"COMMAND\u003d\"$1\""},{"line_number":150,"context_line":"if [ \"$COMMAND\" !\u003d \"install\" ] \u0026\u0026 [ \"$COMMAND\" !\u003d \"start\" ] \u0026\u0026 [ \"$COMMAND\" !\u003d \"stop\" ]; then"},{"line_number":151,"context_line":"    echo \"The first openrand must be \\\"install\\\", \\\"start\\\" or \\\"stop\\\"\""},{"line_number":152,"context_line":"    exit 1"},{"line_number":153,"context_line":"fi"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"if [ \"$COMMAND\" \u003d\u003d \"start\" ] || [ \"$COMMAND\" \u003d\u003d \"stop\" ]; then"},{"line_number":156,"context_line":"    if [ \"$#\" -ne 1 ]; then"}],"source_content_type":"text/x-sh","patch_set":4,"id":"7a3c09a3_c0f86a4c","line":153,"range":{"start_line":150,"start_character":0,"end_line":153,"end_character":2},"updated":"2017-01-14 18:32:48.000000000","message":"As we have multiple commands now, I think it\u0027s better to use \u0027case\u0027, to let us easily maintain command addition.\n\ncase $COMMAND in\n  \"install\" )\n    ...\n    install_s2aio\n    ;;\n  \"start\" )\n    ...\n    start_s2aio\n    ;;\n  \"stop\" )\n    ...\n    stop_s2aio\n    ;;\n  * )\n    usage\nesac","commit_id":"71dc6f21ed04494800fa7d4de34978955578ce75"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"6dcdc44124e50769dd64167be703407a83ad8fb3","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    sudo service docker restart"},{"line_number":41,"context_line":"}"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"install_swift_on_container() {"},{"line_number":44,"context_line":"    # run the swift docker container"},{"line_number":45,"context_line":"    S2AIO_RUNNING\u003d`sudo docker ps | grep -c s2aio`"},{"line_number":46,"context_line":"    S2AIO_EXISTS\u003d`sudo docker ps -a | grep -c s2aio`"}],"source_content_type":"text/x-sh","patch_set":6,"id":"1a430d35_ee127256","line":43,"range":{"start_line":43,"start_character":7,"end_line":43,"end_character":13},"updated":"2017-02-07 11:35:49.000000000","message":"storlet agent?\n\nOh, not. it actually installs swift. Make sense.","commit_id":"b0f64e88be428e5f78486ae8bc415b71777cbbd3"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"6dcdc44124e50769dd64167be703407a83ad8fb3","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    cd -"},{"line_number":110,"context_line":"}"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"install_storlets() {"},{"line_number":113,"context_line":"    install/storlets/prepare_storlets_install.sh \"$FLAVOR\" \"$TARGET\""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    # Install Storlets"}],"source_content_type":"text/x-sh","patch_set":6,"id":"1a430d35_ee67d2e6","line":112,"updated":"2017-02-07 11:35:49.000000000","message":"on host?\n\nAnd probably, I\u0027m missing sort of install_storlets on docker (we need to install agents like DaemonFactory into storlets docker container right?)","commit_id":"b0f64e88be428e5f78486ae8bc415b71777cbbd3"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"53522438854e380b3ad7d1e0b8438e98956d9f89","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    set -e"},{"line_number":21,"context_line":"    swift-init --run-dir /opt/stack/data/swift/run/ all start"},{"line_number":22,"context_line":"    /usr/local/bin/uwsgi /etc/keystone/keystone-uwsgi-public.ini \u0026\u003e /dev/null \u0026"},{"line_number":23,"context_line":"    /usr/local/bin/uwsgi /etc/keystone/keystone-uwsgi-admin.ini \u0026\u003e /dev/null \u0026"},{"line_number":24,"context_line":"    exit 0"},{"line_number":25,"context_line":"}"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-sh","patch_set":7,"id":"3f044301_8b9c92c0","line":23,"updated":"2017-05-11 20:45:05.000000000","message":"set +e again here?","commit_id":"f912dbeb6b4b2172650738e8b9e22519c7971e43"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"c11a8af1050e979f78ce45702b28f7623b1cb012","unresolved":false,"context_lines":[{"line_number":19,"context_line":"start_s2aio() {"},{"line_number":20,"context_line":"    set -e"},{"line_number":21,"context_line":"    swift-init --run-dir /opt/stack/data/swift/run/ all start"},{"line_number":22,"context_line":"    /usr/local/bin/uwsgi /etc/keystone/keystone-uwsgi-public.ini \u0026\u003e /dev/null \u0026"},{"line_number":23,"context_line":"    /usr/local/bin/uwsgi /etc/keystone/keystone-uwsgi-admin.ini \u0026\u003e /dev/null \u0026"},{"line_number":24,"context_line":"    exit 0"},{"line_number":25,"context_line":"}"}],"source_content_type":"text/x-sh","patch_set":8,"id":"ff0f0b1f_9341a13c","line":22,"range":{"start_line":22,"start_character":4,"end_line":22,"end_character":77},"updated":"2017-05-22 04:45:26.000000000","message":"FWIW, currently, the keystone init didn\u0027t work to me. When I tried to this line by hand w/o /dev/null redirection, it fails like as \n\nubuntu@ip-xxxxxxxxxx:~/storlets$ /usr/local/bin/uwsgi /etc/keystone/keystone-uwsgi-public.ini\n[uWSGI] getting INI configuration from /etc/keystone/keystone-uwsgi-public.ini\nopen(\"./python_plugin.so\"): No such file or directory [core/utils.c line 3686]\n!!! UNABLE to load uWSGI plugin: ./python_plugin.so: cannot open shared object file: No such file or directory !!!\n\n\nPerhaps, I lost some modules while rebooting a machine?","commit_id":"931097cc6bf144f21ec7881412cc5e02456358f1"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"a29384da8506132a44a12b0b218b921e651730e5","unresolved":false,"context_lines":[{"line_number":19,"context_line":"start_s2aio() {"},{"line_number":20,"context_line":"    set -e"},{"line_number":21,"context_line":"    swift-init --run-dir /opt/stack/data/swift/run/ all start"},{"line_number":22,"context_line":"    sudo mkdir -p /var/run/uwsgi"},{"line_number":23,"context_line":"    sudo chown ubuntu:ubuntu /var/run/uwsgi"},{"line_number":24,"context_line":"    /usr/local/bin/uwsgi /etc/keystone/keystone-uwsgi-public.ini \u0026\u003e /dev/null \u0026"},{"line_number":25,"context_line":"    /usr/local/bin/uwsgi /etc/keystone/keystone-uwsgi-admin.ini \u0026\u003e /dev/null \u0026"}],"source_content_type":"text/x-sh","patch_set":10,"id":"7f231b9d_75a3e950","line":22,"range":{"start_line":22,"start_character":4,"end_line":22,"end_character":32},"updated":"2017-06-12 05:04:33.000000000","message":"It is currently the common behavior for linux OS to clean up /var/run directory when shutting down. Other solution is adding some settings into tempfiles.d, but I know that this can work.","commit_id":"c2f14446c48816e4bafa57e3f8dc9ba82438a094"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"1ac60e7a5ca44bd75765afc49dfa705f91e7bdcb","unresolved":false,"context_lines":[{"line_number":19,"context_line":"start_s2aio() {"},{"line_number":20,"context_line":"    set -e"},{"line_number":21,"context_line":"    swift-init --run-dir /opt/stack/data/swift/run/ all start"},{"line_number":22,"context_line":"    sudo mkdir -p /var/run/uwsgi"},{"line_number":23,"context_line":"    sudo chown ubuntu:ubuntu /var/run/uwsgi"},{"line_number":24,"context_line":"    /usr/local/bin/uwsgi /etc/keystone/keystone-uwsgi-public.ini \u0026\u003e /dev/null \u0026"},{"line_number":25,"context_line":"    /usr/local/bin/uwsgi /etc/keystone/keystone-uwsgi-admin.ini \u0026\u003e /dev/null \u0026"}],"source_content_type":"text/x-sh","patch_set":10,"id":"7f231b9d_f0ef07ae","line":22,"range":{"start_line":22,"start_character":4,"end_line":22,"end_character":32},"in_reply_to":"7f231b9d_75a3e950","updated":"2017-06-12 06:08:52.000000000","message":"Hah, thanks that info. Alright, you should be right. Adding a conf to prevent to cleanup the /var/run dir in either /etc/tmpfiles.d or /usr/lib/tmpfiles.d. That sounds good.\n\nHowever, I\u0027d keep this as current. That is because probably we should move the configuration into devstack or devstack plugin because it should happen when keystone is setup-ed via devstack, right?","commit_id":"c2f14446c48816e4bafa57e3f8dc9ba82438a094"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"67c7db039ab16ef42d809093257bddafac6240f8","unresolved":false,"context_lines":[{"line_number":19,"context_line":"start_s2aio() {"},{"line_number":20,"context_line":"    set -e"},{"line_number":21,"context_line":"    swift-init --run-dir /opt/stack/data/swift/run/ all start"},{"line_number":22,"context_line":"    sudo mkdir -p /var/run/uwsgi"},{"line_number":23,"context_line":"    sudo chown ubuntu:ubuntu /var/run/uwsgi"},{"line_number":24,"context_line":"    /usr/local/bin/uwsgi /etc/keystone/keystone-uwsgi-public.ini \u0026\u003e /dev/null \u0026"},{"line_number":25,"context_line":"    /usr/local/bin/uwsgi /etc/keystone/keystone-uwsgi-admin.ini \u0026\u003e /dev/null \u0026"}],"source_content_type":"text/x-sh","patch_set":10,"id":"7f231b9d_70a3f750","line":22,"range":{"start_line":22,"start_character":4,"end_line":22,"end_character":32},"in_reply_to":"7f231b9d_f0ef07ae","updated":"2017-06-12 06:26:39.000000000","message":"I agree we can keep this. As you pointed out, we can depend on devstack in the future. (and I believe devstack can handle this point ;-)","commit_id":"c2f14446c48816e4bafa57e3f8dc9ba82438a094"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"a29384da8506132a44a12b0b218b921e651730e5","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    set -e"},{"line_number":21,"context_line":"    swift-init --run-dir /opt/stack/data/swift/run/ all start"},{"line_number":22,"context_line":"    sudo mkdir -p /var/run/uwsgi"},{"line_number":23,"context_line":"    sudo chown ubuntu:ubuntu /var/run/uwsgi"},{"line_number":24,"context_line":"    /usr/local/bin/uwsgi /etc/keystone/keystone-uwsgi-public.ini \u0026\u003e /dev/null \u0026"},{"line_number":25,"context_line":"    /usr/local/bin/uwsgi /etc/keystone/keystone-uwsgi-admin.ini \u0026\u003e /dev/null \u0026"},{"line_number":26,"context_line":"    exit 0"}],"source_content_type":"text/x-sh","patch_set":10,"id":"7f231b9d_f58ed9ce","line":23,"range":{"start_line":23,"start_character":15,"end_line":23,"end_character":28},"updated":"2017-06-12 05:04:33.000000000","message":"I\u0027m afraid that this only works when you run this script with \u0027ubuntu\u0027 user.","commit_id":"c2f14446c48816e4bafa57e3f8dc9ba82438a094"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"67c7db039ab16ef42d809093257bddafac6240f8","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    set -e"},{"line_number":21,"context_line":"    swift-init --run-dir /opt/stack/data/swift/run/ all start"},{"line_number":22,"context_line":"    sudo mkdir -p /var/run/uwsgi"},{"line_number":23,"context_line":"    sudo chown ubuntu:ubuntu /var/run/uwsgi"},{"line_number":24,"context_line":"    /usr/local/bin/uwsgi /etc/keystone/keystone-uwsgi-public.ini \u0026\u003e /dev/null \u0026"},{"line_number":25,"context_line":"    /usr/local/bin/uwsgi /etc/keystone/keystone-uwsgi-admin.ini \u0026\u003e /dev/null \u0026"},{"line_number":26,"context_line":"    exit 0"}],"source_content_type":"text/x-sh","patch_set":10,"id":"7f231b9d_90457373","line":23,"range":{"start_line":23,"start_character":15,"end_line":23,"end_character":28},"in_reply_to":"7f231b9d_90b1f3e4","updated":"2017-06-12 06:26:39.000000000","message":"Makes sense, thanks!","commit_id":"c2f14446c48816e4bafa57e3f8dc9ba82438a094"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"1ac60e7a5ca44bd75765afc49dfa705f91e7bdcb","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    set -e"},{"line_number":21,"context_line":"    swift-init --run-dir /opt/stack/data/swift/run/ all start"},{"line_number":22,"context_line":"    sudo mkdir -p /var/run/uwsgi"},{"line_number":23,"context_line":"    sudo chown ubuntu:ubuntu /var/run/uwsgi"},{"line_number":24,"context_line":"    /usr/local/bin/uwsgi /etc/keystone/keystone-uwsgi-public.ini \u0026\u003e /dev/null \u0026"},{"line_number":25,"context_line":"    /usr/local/bin/uwsgi /etc/keystone/keystone-uwsgi-admin.ini \u0026\u003e /dev/null \u0026"},{"line_number":26,"context_line":"    exit 0"}],"source_content_type":"text/x-sh","patch_set":10,"id":"7f231b9d_90b1f3e4","line":23,"range":{"start_line":23,"start_character":15,"end_line":23,"end_character":28},"in_reply_to":"7f231b9d_f58ed9ce","updated":"2017-06-12 06:08:52.000000000","message":"Good point, how about\n \n sudo chown ${USER}:`id -g -n ${USER}` /var/run/uwsgi\n\n?","commit_id":"c2f14446c48816e4bafa57e3f8dc9ba82438a094"}]}
