vm_tools: vmc/concierge: Implement SetCrostiniVmType command

When migrating crostini installations to baguette, users will need to
have a means of changing the vm type in chrome prefs.

This patch creates a concierge command and a vmc frontend to it that
allows a user to change vm type for the Linux Development Environment
(aka crostini and baguette). The purpose of this command is as a final
step in migrating an existing crostini install to a baguette
(containerless) one.

When the command is issued, the end result should be a change of vm type
as represented
1. in the xattr on the underlying disk image
2. in the chrome pref

BUG=b:476119187
TEST=deploy to DUT and issue command in vmc
NO_IFTTT=IFTTT seems to not be recognizing that i did change both the 'if this' AND 'that'

Change-Id: Id98dc6320b35dcd708de2da943bccca069669938
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform2/+/7512463
Commit-Queue: maciek swiech <drmasquatch@google.com>
Reviewed-by: Zihan Chen <zihanchen@google.com>
Tested-by: maciek swiech <drmasquatch@google.com>
NOKEYCHECK=True
GitOrigin-RevId: c7fc086328c9fc7add128a180fe65cbd575ee2db
2 files changed
tree: 1e2aaec8062899ae041d46af6d3ad09a8c7c853f
  1. constants/
  2. dbus/
  3. mojo/
  4. non_standard_ipc/
  5. proto/
  6. src/
  7. switches/
  8. .gitignore
  9. BUILD.gn
  10. build.rs
  11. Cargo.toml
  12. DIR_METADATA
  13. LICENSE
  14. OWNERS
  15. README.md
  16. system_api.pc
README.md

This directory (platform2/system_api) contains constants and definitions like D-Bus service names that are shared between Chromium and Chromium OS.

This directory is only for things like headers and .proto files. No implementation should be added.

When writting a .proto file make sure to use:

option optimize_for = LITE_RUNTIME;

This will force usage of a lite protobuf instead of a full/heavy weight protobuf. The browser only links against the light version, so you will get cryptic link errors about missing parts of Message if you define a protobuf here and then try to use it in Chrome. Currently CrOS links against the full protobuffer library, but that might change in the future.

When declaring a protobuf, avoid use of required unless it is exactly what you mean. “Required is Forever” and very rarely should actually be used. Consult Protocol Buffer Basics: C++ for a detailed of this issue.