<div dir="ltr">Hi, Please also be aware that there could be different developer. Debug / hacking / patch to different part of the system could happen like:<div><br></div><div> - debug certain library in OS snap</div><div> - debug Kernel snap: we probably still need to use android bsp/library like what we do in ubuntu phone now. So the kernel snap might also include some device tree binaries with/without source code.</div><div> - new bsp programming happened inside chip vendor.</div><div><div><br></div></div><div>We are not only need to make end-user / high-level programmer happier, without make the life of lower level developer worse (you know that sometime low level developer need to work even without network enable)</div><div><br></div><div>BR, YC</div></div><div class="gmail_extra"><br><div class="gmail_quote">2015-06-16 19:37 GMT+08:00 Rick Spencer <span dir="ltr"><<a href="mailto:rick.spencer@canonical.com" target="_blank">rick.spencer@canonical.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>When I develop for the phone, I:</div><div><br></div><div>1. Work on my application inside Qt Creator on my desktop until I am either "done" or need to develop against specific phone capabilities that are hard to mock on the desktop. This is a normal run -> debug -> edit -> run cycle that everyone is familiar with on the desktop.</div><div>2. Use "Run on Device" to test it on the device. This command packages the applications, moves any old version on the phone out of the way, runs my app, and gives me a full account of what is happening (error messages, stdout messages, etc...) within QtCreator.</div><div><br></div><div>Contrast #2 with my experience yesterday on snappy. I accomplished #1, my service was running fine, but then I had to snappy build (fair enough), snappy remote intstall (fair enough), and then my snap doesn't work on the device. And I got absolutely no feedback from the system what the problem was. I learned that I can grovel through systemctl to launch the service, and look in syslog and journctl to read my stdout after sshing into the device. In other words, I was forced to content with the internal implementation details of snappy. </div><div>So, I think we need 3 things:</div><div>1. An admin shell on the device to make admin commands discoverable and to hide the implementation details of the system.</div><div>2. A developer shell (could just be expanded snappy remote) run from the desktop that hides all the implementation detailss of snappy from the developer, and makes it easy to deploy, test, and debug snaps on a snappy image, just like QtCreator does for the phone.</div><div>3. SSH for the rare times when someone needs to grovel around the system and deal with snappy implementation details.</div><div><br></div><div>I get that we care about making it comfy for people who are used to Ubuntu working a certain way. However, snappy does not work that way. I think we should rather be focused on making snappy easy to use. </div><div><br></div><div>Cheers, Rick</div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jun 16, 2015 at 4:44 AM, Loïc Minier <span dir="ltr"><<a href="mailto:loic.minier@ubuntu.com" target="_blank">loic.minier@ubuntu.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">You're suggesting to kill the idea entirely; that might be a valid standpoint, but you've dismissed this a bit quickly.<div><br></div><div>First, consider that the networking industry is proposing this today: in all products, for all major brands, you end up in a custom CLI experience. I certainly agree it's painful to learn a new one each time, much like it's a pain to learn how to use/configure a new piece of software of any kind. But at least we get to define this one and offer it as a base for others to derive from. Perhaps frameworks/snaps could extent the command set with additional commands, e.g. to manage the ASIC, or provide hardware diagnostics etc.</div><div><br></div><div>I'm not convinced that this shell approach is inherently good or bad for these network vendors, but it's a fact that they all do this, and snappy shell gives a path towards this kind of user experience.</div><div><br></div><div><br></div><div>Second, you've dismissed the other benefits towards delivering a more locked down user experience (e.g. I want to ship a critical piece of hardware based on snappy, they may/may not install apps, they may/may not change the config of snaps, they may/may not run random shell commands).</div><div><br></div><div>I also mentioned smoothing the move to a more minimal system (without some of the tools you like). But on this Comfy part, it's fair to point out we should judge this one on its own merits though.</div><div><br></div><div><br></div><div>Snappy shell needs not be required for all snappy based images and/or needs not be on port 22, it is rather an optional interface to snappy, much like webdm is an useful tool and default web user experience. (Perhaps it should be implemented as a completely separate addon, but it felt more natural to tie it to the main command-line tool.) Perhaps we'll have a snappy router image where it makes sense to make this shell the default, with or without direct shell access enabled, while a snappy media-center image would not have it.</div><div><br></div><div>Cheers,</div></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jun 15, 2015 at 6:42 PM, Gustavo Niemeyer <span dir="ltr"><<a href="mailto:gustavo.niemeyer@canonical.com" target="_blank">gustavo.niemeyer@canonical.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I'm personally two-hearted about this idea.<div><br></div><div>On one hand, I can see the appeal, and have used something similar to that myself for Smart Package Manager, where people could use a shell to type in the all of the subcommands that they could use under the "smart" command line tool. It was a neat way to type several subcommands in a row without the cost of initializing the in-memory graph cache necessary for computing operations, and was expensive to do.</div><div><br></div><div>On the other hand, there's no relevant init cost for the snappy cli, and custom shell can become an annoyance rather than an advantage. For example, I use traditional unix tools such as grep, sed, awk, sort, all the time when interacting with textual output from dpkg, apt, etc, and also use text files as temporary storage, shell variables, etc. Being in a custom shell means people will be constrained in an unusual way within an atypical shell to the tasks which they tend to understand otherwise.</div><div><br></div><div>The thing that fired my worries while reading your message was the part where you say the goal is to deliver a slick console user experience as found when telneting into network equipment. While I don't have much experience there, the few times I did that I found myself within an alien and apparently clumsy environment where I'd have to re-learn everything. It wasn't a smooth feeling at all.</div><div><br></div><div>So, here is an idea: rather than redoing the whole shell, can we identify what are the winning aspects of that integrated shell (good help? pleasant command names? etc) and try to replicate that within a traditional shell?</div><div><br></div><div><br></div><div class="gmail_extra"><br><div class="gmail_quote"><div><div>On Mon, Jun 15, 2015 at 12:50 PM, Loïc Minier <span dir="ltr"><<a href="mailto:loic.minier@ubuntu.com" target="_blank">loic.minier@ubuntu.com</a>></span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div><div dir="ltr"><span><h3 dir="ltr" style="line-height:1.38;margin-top:8pt;margin-bottom:0pt"><span style="font-size:16px;font-family:'Trebuchet MS';color:rgb(102,102,102);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">User experience</span></h3><br><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:Ubuntu;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">When you SSH into a Snappy system, you currently end up on a shell prompt. Wouldn’t it be great to actually land in Snappy itself?</span></p><br><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(153,153,153);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Welcome to Snappy Ubuntu Core 15.04</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">snappy# </span></p><br><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:Ubuntu;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">How do I get started?</span></p><br><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">snappy# help</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(153,153,153);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Usage:</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(153,153,153);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">  <command> [<arg>...]</span></p><br><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(153,153,153);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Available commands</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(153,153,153);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">  booted              Flag that rootfs booted successfully</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(153,153,153);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">  build               Builds a snap package (aliases: bu)</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(153,153,153);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">  config              Set configuration for an installed package.</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:Ubuntu;color:rgb(0,0,0);font-style:italic;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">[... edited for brievety...]</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(153,153,153);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">  shell               Start a shell</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(153,153,153);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">  update              Update all installed parts</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(153,153,153);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">  versions            (deprecated) please use "list"</span></p><br><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:Ubuntu;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Simple commands like </span><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">install</span><span style="font-size:14.6666666666667px;font-family:Ubuntu;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">, </span><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">update</span><span style="font-size:14.6666666666667px;font-family:Ubuntu;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"> etc. work as expected:</span></p><br><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">snappy# info</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(153,153,153);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">release: ubuntu-core/15.04/stable</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(153,153,153);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">architecture: amd64</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(153,153,153);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">frameworks: webdm</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(153,153,153);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">apps: </span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">snappy# list -v</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(153,153,153);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Name          Date       Version Developer </span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(153,153,153);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">ubuntu-core   2015-06-11 3       ubuntu*   </span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(153,153,153);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">webdm         2015-06-11 0.9     *         </span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(153,153,153);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">generic-amd64 2015-06-11 1.1.1   *         </span></p><br><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:Ubuntu;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">We should revisit some commands or aliases to have a friendlier, more rewarding user experience, e.g. </span><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">update</span><span style="font-size:14.6666666666667px;font-family:Ubuntu;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"> could provide some output when no update is available and entering a shell command like </span><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">ls</span><span style="font-size:14.6666666666667px;font-family:Ubuntu;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"> would hint at using </span><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">help</span><span style="font-size:14.6666666666667px;font-family:Ubuntu;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">:</span></p><br><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">snappy# update</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(153,153,153);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">System is up-to-date!</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">snappy# ls</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(153,153,153);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">No such command; “help” for a list of commands</span></p><br><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:Ubuntu;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Configuration is only possible for snaps that have the required hook and may be set manually by key or globally from an URL, and of course immutable configs can’t be changed.</span></p><br><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">snappy# config</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">(config)# list</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Name           Date       Version Developer </span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(153,153,153);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">ubuntu-core    2015-06-11 3       ubuntu    </span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(153,153,153);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">config-example 2015-06-15 1.0.6   canonical </span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(153,153,153);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">webdm          2015-06-11 0.9               </span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">(config)# config xkcd-webserver</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(153,153,153);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">No config found for this snap</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">(config)# config ubuntu-core</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">(ubuntu-core)# show</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(153,153,153);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">autopilot: true</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(153,153,153);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">timezone: Etc/UTC</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(153,153,153);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">hostname: localhost.localdomain</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">(ubuntu-core)# set autopilot false</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(153,153,153);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Config set</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">(ubuntu-core)# exit</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">snappy# config config-example set -u <a href="https://conf.example.com/config-example.yaml" target="_blank">https://conf.example.com/config-example.yaml</a></span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(153,153,153);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Config set</span></p><br><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:Ubuntu;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">A new </span><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">shell</span><span style="font-size:14.6666666666667px;font-family:Ubuntu;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"> command is provided to start the default user’s interactive shell or to run commands ( under “</span><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">sh -c</span><span style="font-size:14.6666666666667px;font-family:Ubuntu;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">”).</span></p><br><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:16px;font-family:'Trebuchet MS';color:rgb(102,102,102);font-weight:bold;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Goals of snappy shell</span></p><br><ul style="margin-top:0pt;margin-bottom:0pt"><li dir="ltr" style="list-style-type:disc;font-size:14.6666666666667px;font-family:Ubuntu;color:rgb(0,0,0);vertical-align:baseline;background-color:transparent"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Deliver a slick console user experience as found when SSH-ing (or telnet-ing) into network equipments such as switches, routers, firewalls etc.</span></p></li><li dir="ltr" style="list-style-type:disc;font-size:14.6666666666667px;font-family:Ubuntu;color:rgb(0,0,0);vertical-align:baseline;background-color:transparent"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Allows restricting access to the shell while allowing for useful features such as </span><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';vertical-align:baseline;white-space:pre-wrap;background-color:transparent">update</span><span style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">, </span><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';vertical-align:baseline;white-space:pre-wrap;background-color:transparent">install</span><span style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent"> etc. (could be controlled by a new </span><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';vertical-align:baseline;white-space:pre-wrap;background-color:transparent">allowed-cli-commands</span><span style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent"> ubuntu-core config or similar)</span></p></li><li dir="ltr" style="list-style-type:disc;font-size:14.6666666666667px;font-family:Ubuntu;color:rgb(0,0,0);vertical-align:baseline;background-color:transparent"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Smoothes transition into a Comfy world where the regular rootfs becomes smaller and smaller.</span></p></li></ul><br><h3 dir="ltr" style="line-height:1.38;margin-top:8pt;margin-bottom:0pt"><span style="font-size:16px;font-family:'Trebuchet MS';color:rgb(102,102,102);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Implementation</span></h3><br><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:Ubuntu;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">This user experience would be delivered by the main “</span><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">snappy</span><span style="font-size:14.6666666666667px;font-family:Ubuntu;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">” binary when it’s launched as “snappy-cli” as the basename of </span><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">argv[0]</span><span style="font-size:14.6666666666667px;font-family:Ubuntu;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">. If this feature is not enabled by default, or from a shell, you would run “</span><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">snappy cli</span><span style="font-size:14.6666666666667px;font-family:Ubuntu;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">” to start an interactive snappy shell session. NB: </span><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">cli</span><span style="font-size:14.6666666666667px;font-family:Ubuntu;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"> is to avoid confusion with the </span><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">shell</span><span style="font-size:14.6666666666667px;font-family:Ubuntu;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"> command to run a command or an interactive shell.</span></p><br><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:Ubuntu;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">SSH integration could be done in multiple ways:</span></p><ol style="margin-top:0pt;margin-bottom:0pt"><li dir="ltr" style="list-style-type:decimal;font-size:14.6666666666667px;font-family:Ubuntu;color:rgb(0,0,0);vertical-align:baseline;background-color:transparent"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">integrate a SSH server in </span><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';vertical-align:baseline;white-space:pre-wrap;background-color:transparent">snappy</span><span style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent"> itself; I don’t know how hard this is in go today; this might be a worthwhile exercise long-term to get a smaller rootfs</span></p></li><li dir="ltr" style="list-style-type:decimal;font-size:14.6666666666667px;font-family:Ubuntu;color:rgb(0,0,0);vertical-align:baseline;background-color:transparent"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">configure SSH server and login to always start </span><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';vertical-align:baseline;white-space:pre-wrap;background-color:transparent">/bin/snappy-cli</span><span style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent"> instead of the user’s shell, then lookup the user’s shell in the </span><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';vertical-align:baseline;white-space:pre-wrap;background-color:transparent">passwd</span><span style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent"> database to run the preferred shell with “</span><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';vertical-align:baseline;white-space:pre-wrap;background-color:transparent">snappy shell</span><span style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">”</span></p></li><li dir="ltr" style="list-style-type:decimal;font-size:14.6666666666667px;font-family:Ubuntu;color:rgb(0,0,0);vertical-align:baseline;background-color:transparent"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">(preferred) configure the user’s shell to </span><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';vertical-align:baseline;white-space:pre-wrap;background-color:transparent">/bin/snappy-cli</span><span style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent"> and create a new snappy-only ubuntu-core config for the preferred interactive shell (defaults to </span><span style="font-size:14.6666666666667px;font-family:'Ubuntu Mono';vertical-align:baseline;white-space:pre-wrap;background-color:transparent">/bin/bash</span><span style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">); drawback: this would be system-wide as we don’t have per-user configs</span></p></li></ol><br><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6666666666667px;font-family:Ubuntu;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Questions? Comments? Pile on at: </span><a href="https://docs.google.com/document/d/1DeR2JoCBDX2C1r6a2wV60uqvi7a89OwHh5gJ19tBZvM/edit" style="text-decoration:none" target="_blank"><span style="font-size:14.6666666666667px;font-family:Ubuntu;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">https://docs.google.com/document/d/1DeR2JoCBDX2C1r6a2wV60uqvi7a89OwHh5gJ19tBZvM/edit</span></a></p><div><span><br></span></div>Cheers,<span><font color="#888888"><br></font></span></span><span><font color="#888888"><div><span>-- </span></div><div><span>Loïc Minier</span></div></font></span></div>
<br></div></div><span><font color="#888888">--<br>
snappy-devel mailing list<br>
<a href="mailto:snappy-devel@lists.ubuntu.com" target="_blank">snappy-devel@lists.ubuntu.com</a><br>
Modify settings or unsubscribe at: <a href="https://lists.ubuntu.com/mailman/listinfo/snappy-devel" rel="noreferrer" target="_blank">https://lists.ubuntu.com/mailman/listinfo/snappy-devel</a><br>
<br></font></span></blockquote></div><span><font color="#888888"><br><br clear="all"><div><br></div>-- <br><div>gustavo @ <a href="http://niemeyer.net" target="_blank">http://niemeyer.net</a></div>

</font></span></div></div>
</blockquote></div><br></div>
</div></div><br>--<br>
snappy-devel mailing list<br>
<a href="mailto:snappy-devel@lists.ubuntu.com" target="_blank">snappy-devel@lists.ubuntu.com</a><br>
Modify settings or unsubscribe at: <a href="https://lists.ubuntu.com/mailman/listinfo/snappy-devel" rel="noreferrer" target="_blank">https://lists.ubuntu.com/mailman/listinfo/snappy-devel</a><br>
<br></blockquote></div><br></div>
</div></div><br>--<br>
snappy-devel mailing list<br>
<a href="mailto:snappy-devel@lists.ubuntu.com">snappy-devel@lists.ubuntu.com</a><br>
Modify settings or unsubscribe at: <a href="https://lists.ubuntu.com/mailman/listinfo/snappy-devel" rel="noreferrer" target="_blank">https://lists.ubuntu.com/mailman/listinfo/snappy-devel</a><br>
<br></blockquote></div><br></div>