sdk_subtools: Refactor into a build api endpoint.

Methods from scripts/build_sdk_subtools that are shared with the recipe
are moved mostly verbatim into chromite/service/sdk_subtools.py.

A `sudo` argument is added to setup_base_sdk, and the subtools chroot
sentinel file is created with osutils.WriteText(sudo=True) to reduce
friction when invoking from the build api layer.

api/controller/sdk_subtools.py is added with unit tests and a
call_scripts template, and the proto is registered with the router.

BUG=b:277992359
TEST=call_scripts/build_sdk_subtools__build_sdk_subtools

Change-Id: I5907e1a92050b0d781962eb4812112efe41b5684
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/4792625
Reviewed-by: Mike Frysinger <vapier@chromium.org>
Commit-Queue: Trent Apted <tapted@chromium.org>
Tested-by: Trent Apted <tapted@chromium.org>
diff --git a/api/controller/controller_util.py b/api/controller/controller_util.py
index 04a6f5e..0b93ee4 100644
--- a/api/controller/controller_util.py
+++ b/api/controller/controller_util.py
@@ -10,6 +10,7 @@
 from pathlib import Path
 from typing import Iterable, Optional, TYPE_CHECKING, Union
 
+from chromite.api.gen.chromite.api import sdk_subtools_pb2
 from chromite.api.gen.chromite.api import sysroot_pb2
 from chromite.api.gen.chromite.api import test_pb2
 from chromite.api.gen.chromiumos import common_pb2
@@ -243,6 +244,7 @@
     output_proto: Union[
         sysroot_pb2.InstallPackagesResponse,
         sysroot_pb2.InstallToolchainResponse,
+        sdk_subtools_pb2.BuildSdkSubtoolsResponse,
         test_pb2.BuildTargetUnitTestResponse,
     ],
     target_sysroot: sysroot_lib.Sysroot,