From c4b05515eecd118b090a664eb002dfc637ebb719 Mon Sep 17 00:00:00 2001 From: Seungjae Yoo Date: Tue, 3 Mar 2026 16:00:32 +0900 Subject: [PATCH 1/2] Move podcvd and libcfcontainer from frontend/src/ to container/src/ --- .github/workflows/presubmit.yaml | 4 ++-- .gitignore | 2 ++ .../src/libcfcontainer/cuttlefish_container.go | 2 +- {frontend => container}/src/libcfcontainer/go.mod | 2 +- {frontend => container}/src/libcfcontainer/go.sum | 0 {frontend => container}/src/podcvd/README.md | 2 +- {frontend => container}/src/podcvd/go.mod | 6 +++--- {frontend => container}/src/podcvd/go.sum | 0 {frontend => container}/src/podcvd/internal/adb.go | 2 +- {frontend => container}/src/podcvd/internal/const.go | 0 {frontend => container}/src/podcvd/internal/cvd.go | 0 {frontend => container}/src/podcvd/internal/host.go | 2 +- {frontend => container}/src/podcvd/internal/parser.go | 0 {frontend => container}/src/podcvd/internal/util.go | 2 +- {frontend => container}/src/podcvd/main.go | 4 ++-- frontend/.gitignore | 1 - 16 files changed, 15 insertions(+), 14 deletions(-) rename {frontend => container}/src/libcfcontainer/cuttlefish_container.go (99%) rename {frontend => container}/src/libcfcontainer/go.mod (95%) rename {frontend => container}/src/libcfcontainer/go.sum (100%) rename {frontend => container}/src/podcvd/README.md (91%) rename {frontend => container}/src/podcvd/go.mod (88%) rename {frontend => container}/src/podcvd/go.sum (100%) rename {frontend => container}/src/podcvd/internal/adb.go (97%) rename {frontend => container}/src/podcvd/internal/const.go (100%) rename {frontend => container}/src/podcvd/internal/cvd.go (100%) rename {frontend => container}/src/podcvd/internal/host.go (99%) rename {frontend => container}/src/podcvd/internal/parser.go (100%) rename {frontend => container}/src/podcvd/internal/util.go (96%) rename {frontend => container}/src/podcvd/main.go (98%) diff --git a/.github/workflows/presubmit.yaml b/.github/workflows/presubmit.yaml index 6f2813fa994..d2299261baf 100644 --- a/.github/workflows/presubmit.yaml +++ b/.github/workflows/presubmit.yaml @@ -75,12 +75,12 @@ jobs: matrix: dir: - "e2etests" + - "container/src/libcfcontainer" + - "container/src/podcvd" - "frontend/src/host_orchestrator" - - "frontend/src/libcfcontainer" - "frontend/src/libhoclient" - "frontend/src/liboperator" - "frontend/src/operator" - - "frontend/src/podcvd" - "tools/baseimage" steps: - name: Checkout repository diff --git a/.gitignore b/.gitignore index 5eb572bad79..78a4a0b1a5d 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,8 @@ cuttlefish-*_*.*.*.tar.xz /*/debian/debhelper-build-stamp /*/debian/*.log +container/src/podcvd/podcvd + frontend/src/operator/webui/src/environments/version.ts /bazel-* diff --git a/frontend/src/libcfcontainer/cuttlefish_container.go b/container/src/libcfcontainer/cuttlefish_container.go similarity index 99% rename from frontend/src/libcfcontainer/cuttlefish_container.go rename to container/src/libcfcontainer/cuttlefish_container.go index 99790835064..ac7e6dbd738 100644 --- a/frontend/src/libcfcontainer/cuttlefish_container.go +++ b/container/src/libcfcontainer/cuttlefish_container.go @@ -205,7 +205,7 @@ func (m *CuttlefishContainerManagerImpl) ExecOnContainer(ctx context.Context, ct func (m *CuttlefishContainerManagerImpl) StopAndRemoveContainer(ctx context.Context, ctr string) error { timeout := int(30) stopConfig := container.StopOptions{ - Signal: "SIGKILL", + Signal: "SIGKILL", Timeout: &timeout, } if err := m.cli.ContainerStop(ctx, ctr, stopConfig); err != nil { diff --git a/frontend/src/libcfcontainer/go.mod b/container/src/libcfcontainer/go.mod similarity index 95% rename from frontend/src/libcfcontainer/go.mod rename to container/src/libcfcontainer/go.mod index 9d084481c35..111ac32295b 100644 --- a/frontend/src/libcfcontainer/go.mod +++ b/container/src/libcfcontainer/go.mod @@ -1,4 +1,4 @@ -module github.com/google/android-cuttlefish/frontend/src/libcfcontainer +module github.com/google/android-cuttlefish/container/src/libcfcontainer go 1.24.0 diff --git a/frontend/src/libcfcontainer/go.sum b/container/src/libcfcontainer/go.sum similarity index 100% rename from frontend/src/libcfcontainer/go.sum rename to container/src/libcfcontainer/go.sum diff --git a/frontend/src/podcvd/README.md b/container/src/podcvd/README.md similarity index 91% rename from frontend/src/podcvd/README.md rename to container/src/podcvd/README.md index c7e53df2015..473dbdd9033 100644 --- a/frontend/src/podcvd/README.md +++ b/container/src/podcvd/README.md @@ -8,7 +8,7 @@ podcvd is experimental project. A lot of features may be unstable today. ```bash cd /path/to/android-cuttlefish -cd frontend/src/podcvd +cd container/src/podcvd go build . ``` diff --git a/frontend/src/podcvd/go.mod b/container/src/podcvd/go.mod similarity index 88% rename from frontend/src/podcvd/go.mod rename to container/src/podcvd/go.mod index da2d9752713..bda1273a48f 100644 --- a/frontend/src/podcvd/go.mod +++ b/container/src/podcvd/go.mod @@ -1,12 +1,12 @@ -module github.com/google/android-cuttlefish/frontend/src/podcvd +module github.com/google/android-cuttlefish/container/src/podcvd go 1.24.0 toolchain go1.24.8 -replace github.com/google/android-cuttlefish/frontend/src/libcfcontainer => ../libcfcontainer +replace github.com/google/android-cuttlefish/container/src/libcfcontainer => ../libcfcontainer -require github.com/google/android-cuttlefish/frontend/src/libcfcontainer v0.0.0-00010101000000-000000000000 +require github.com/google/android-cuttlefish/container/src/libcfcontainer v0.0.0-00010101000000-000000000000 require ( dario.cat/mergo v1.0.2 // indirect diff --git a/frontend/src/podcvd/go.sum b/container/src/podcvd/go.sum similarity index 100% rename from frontend/src/podcvd/go.sum rename to container/src/podcvd/go.sum diff --git a/frontend/src/podcvd/internal/adb.go b/container/src/podcvd/internal/adb.go similarity index 97% rename from frontend/src/podcvd/internal/adb.go rename to container/src/podcvd/internal/adb.go index fb75cffb062..9a93c0d4e4a 100644 --- a/frontend/src/podcvd/internal/adb.go +++ b/container/src/podcvd/internal/adb.go @@ -18,7 +18,7 @@ import ( "fmt" "os/exec" - "github.com/google/android-cuttlefish/frontend/src/libcfcontainer" + "github.com/google/android-cuttlefish/container/src/libcfcontainer" ) func ConnectAdb(ccm libcfcontainer.CuttlefishContainerManager, instanceGroup InstanceGroup) error { diff --git a/frontend/src/podcvd/internal/const.go b/container/src/podcvd/internal/const.go similarity index 100% rename from frontend/src/podcvd/internal/const.go rename to container/src/podcvd/internal/const.go diff --git a/frontend/src/podcvd/internal/cvd.go b/container/src/podcvd/internal/cvd.go similarity index 100% rename from frontend/src/podcvd/internal/cvd.go rename to container/src/podcvd/internal/cvd.go diff --git a/frontend/src/podcvd/internal/host.go b/container/src/podcvd/internal/host.go similarity index 99% rename from frontend/src/podcvd/internal/host.go rename to container/src/podcvd/internal/host.go index f4eb59273a8..e245b7bbcb0 100644 --- a/frontend/src/podcvd/internal/host.go +++ b/container/src/podcvd/internal/host.go @@ -26,7 +26,7 @@ import ( "strings" "time" - "github.com/google/android-cuttlefish/frontend/src/libcfcontainer" + "github.com/google/android-cuttlefish/container/src/libcfcontainer" "github.com/containerd/errdefs" "github.com/docker/docker/api/types/container" diff --git a/frontend/src/podcvd/internal/parser.go b/container/src/podcvd/internal/parser.go similarity index 100% rename from frontend/src/podcvd/internal/parser.go rename to container/src/podcvd/internal/parser.go diff --git a/frontend/src/podcvd/internal/util.go b/container/src/podcvd/internal/util.go similarity index 96% rename from frontend/src/podcvd/internal/util.go rename to container/src/podcvd/internal/util.go index a0298feae46..56464e893f7 100644 --- a/frontend/src/podcvd/internal/util.go +++ b/container/src/podcvd/internal/util.go @@ -19,7 +19,7 @@ import ( "crypto/sha256" "fmt" - "github.com/google/android-cuttlefish/frontend/src/libcfcontainer" + "github.com/google/android-cuttlefish/container/src/libcfcontainer" "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/filters" diff --git a/frontend/src/podcvd/main.go b/container/src/podcvd/main.go similarity index 98% rename from frontend/src/podcvd/main.go rename to container/src/podcvd/main.go index d7482779a90..4920c31c14a 100644 --- a/frontend/src/podcvd/main.go +++ b/container/src/podcvd/main.go @@ -23,8 +23,8 @@ import ( "os" "sync" - "github.com/google/android-cuttlefish/frontend/src/libcfcontainer" - "github.com/google/android-cuttlefish/frontend/src/podcvd/internal" + "github.com/google/android-cuttlefish/container/src/libcfcontainer" + "github.com/google/android-cuttlefish/container/src/podcvd/internal" ) func disconnectAdb(ccm libcfcontainer.CuttlefishContainerManager, groupName string) error { diff --git a/frontend/.gitignore b/frontend/.gitignore index 4f2742fabbf..3f550451fdf 100644 --- a/frontend/.gitignore +++ b/frontend/.gitignore @@ -1,4 +1,3 @@ /src/host_orchestrator/host_orchestrator -/src/podcvd/podcvd /src/cvdserver_bootstrapper/cvdserver_bootstrapper /src/operator/operator From ed5f2c118994ab69c834d9d4f0b1aaec0f974228 Mon Sep 17 00:00:00 2001 From: Seungjae Yoo Date: Tue, 3 Mar 2026 16:42:57 +0900 Subject: [PATCH 2/2] Introduce cuttlefish-podcvd debian package --- .../actions/build-debian-packages/action.yaml | 1 + container/debian/changelog | 5 ++ container/debian/control | 20 +++++ ...uttlefish-podcvd.cuttlefish-podcvd.default | 5 ++ .../cuttlefish-podcvd.cuttlefish-podcvd.init | 74 +++++++++++++++++++ container/debian/cuttlefish-podcvd.install | 1 + container/debian/cuttlefish-podcvd.links | 1 + container/debian/rules | 42 +++++++++++ container/debian/source/format | 1 + container/debian/source/lintian-overrides | 3 + 10 files changed, 153 insertions(+) create mode 100644 container/debian/changelog create mode 100644 container/debian/control create mode 100644 container/debian/cuttlefish-podcvd.cuttlefish-podcvd.default create mode 100644 container/debian/cuttlefish-podcvd.cuttlefish-podcvd.init create mode 100644 container/debian/cuttlefish-podcvd.install create mode 100644 container/debian/cuttlefish-podcvd.links create mode 100755 container/debian/rules create mode 100644 container/debian/source/format create mode 100644 container/debian/source/lintian-overrides diff --git a/.github/actions/build-debian-packages/action.yaml b/.github/actions/build-debian-packages/action.yaml index c9eb0cf78df..7a65e3a051c 100644 --- a/.github/actions/build-debian-packages/action.yaml +++ b/.github/actions/build-debian-packages/action.yaml @@ -44,6 +44,7 @@ runs: run: | sudo docker build --file "tools/buildutils/cw/Containerfile" --tag "android-cuttlefish-build" . sudo docker run -v=$PWD:/mnt/build -w /mnt/build -v=$HOME/bazel-disk-cache:/root/bazel-disk-cache android-cuttlefish-build base -d /root/bazel-disk-cache + sudo docker run -v=$PWD:/mnt/build -w /mnt/build android-cuttlefish-build container sudo docker run -v=$PWD:/mnt/build -w /mnt/build android-cuttlefish-build frontend sudo docker run -v=$PWD:/mnt/build -w /mnt/build android-cuttlefish-build cuttlefish-integration-gigabyte-arm64 shell: bash diff --git a/container/debian/changelog b/container/debian/changelog new file mode 100644 index 00000000000..a3b45b7fb70 --- /dev/null +++ b/container/debian/changelog @@ -0,0 +1,5 @@ +cuttlefish-container (1.46.0) UNRELEASED; urgency=medium + + * + + -- Seungjae Yoo Tue, 03 Mar 2026 16:49:04 +0900 diff --git a/container/debian/control b/container/debian/control new file mode 100644 index 00000000000..652631ece1d --- /dev/null +++ b/container/debian/control @@ -0,0 +1,20 @@ +Source: cuttlefish-container +Maintainer: Cuttlefish Team +Section: misc +Priority: optional +Build-Depends: config-package-dev, + debhelper-compat (= 12), + golang (>= 2:1.23~) | golang-1.23, +Standards-Version: 4.5.0 +Rules-Requires-Root: no + +Package: cuttlefish-podcvd +Architecture: any +Depends: adb, + android-sdk-platform-tools-common, + podman, +Pre-Depends: ${misc:Pre-Depends} +Description: Cuttlefish Android Virtual Device companion package + Contains a binary named 'podcvd' needed to launch Cuttlefish Android + Virtual Device on the isolated host environment prepared on rootless + container instances. diff --git a/container/debian/cuttlefish-podcvd.cuttlefish-podcvd.default b/container/debian/cuttlefish-podcvd.cuttlefish-podcvd.default new file mode 100644 index 00000000000..2051eebb6d5 --- /dev/null +++ b/container/debian/cuttlefish-podcvd.cuttlefish-podcvd.default @@ -0,0 +1,5 @@ +# defaults for cuttlefish-podcvd + +# CIDR of 'podcvd' network interface used for routing into IP addresses of +# Cuttlefish container instances. +#podcvd_cidr=192.168.80.0/24 diff --git a/container/debian/cuttlefish-podcvd.cuttlefish-podcvd.init b/container/debian/cuttlefish-podcvd.cuttlefish-podcvd.init new file mode 100644 index 00000000000..66f253ab5b4 --- /dev/null +++ b/container/debian/cuttlefish-podcvd.cuttlefish-podcvd.init @@ -0,0 +1,74 @@ +#!/usr/bin/env bash +# +### BEGIN INIT INFO +# Provides: cuttlefish-podcvd +# Required-Start: $remote_fs $syslog +# Required-Stop: $remote_fs $syslog +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Setup initial environment to use podcvd +# Description: This script sets up initial environment to launch +# Cuttlefish instances on the container instance via podcvd, +# such as network interface preparation. +### END INIT INFO +# +# Copyright (C) 2026 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +if [ -f /etc/default/cuttlefish-podcvd ]; then + . /etc/default/cuttlefish-podcvd +fi +podcvd_cidr=${podcvd_cidr:-192.168.80.0/24} + +podcvd_ifname="podcvd" + +start() { + ip link add "${podcvd_ifname}" type dummy + ip link set "${podcvd_ifname}" up + ip route add local "${podcvd_cidr}" dev "${podcvd_ifname}" +} + +stop() { + for cidr in $(ip route show table local dev ${podcvd_ifname} | awk '{print $2}'); do + ip route del local "${cidr}" dev "${podcvd_ifname}" || true + done + ip link set dev "${podcvd_ifname}" down || true + ip link del "${podcvd_ifname}" || true +} + +usage() { + echo $0: start\|stop\|status +} + +if test $# != 1; then + usage +fi +case "$1" in + condrestart|force-reload|reload|restart|try-restart) + stop && start + ;; + shutdown|stop) + stop + ;; + start) + start + ;; + status) + rh_status + ;; + *) + usage + ;; +esac +exit $RETVAL diff --git a/container/debian/cuttlefish-podcvd.install b/container/debian/cuttlefish-podcvd.install new file mode 100644 index 00000000000..6f58e7eeb0b --- /dev/null +++ b/container/debian/cuttlefish-podcvd.install @@ -0,0 +1 @@ +src/podcvd/podcvd /usr/lib/cuttlefish-common/bin/ diff --git a/container/debian/cuttlefish-podcvd.links b/container/debian/cuttlefish-podcvd.links new file mode 100644 index 00000000000..f56141a4021 --- /dev/null +++ b/container/debian/cuttlefish-podcvd.links @@ -0,0 +1 @@ +/usr/lib/cuttlefish-common/bin/podcvd /usr/bin/podcvd diff --git a/container/debian/rules b/container/debian/rules new file mode 100755 index 00000000000..c1978c8af75 --- /dev/null +++ b/container/debian/rules @@ -0,0 +1,42 @@ +#!/usr/bin/make -f + +# Start build by executing: +# $ debuild --prepend-path /usr/local/bin -i -us -uc + +# Uncomment this line out to make installation process more chatty. +# Keep it on until we know there's no outstanding problems with installation. +# export DH_VERBOSE=1 + +GOBIN := $$(which go || echo /usr/lib/$$(ls /usr/lib | grep "^go-1." | sort -V | tail -1)/bin/go) +PODCVD_SOURCE_DIR := src/podcvd + +%: + dh $@ --with=config-package + +.PHONY: override_dh_auto_build +override_dh_auto_build: + (cd ${PODCVD_SOURCE_DIR} && $(GOBIN) build -v -buildmode=pie -ldflags="-w") + +.PHONY: override_dh_auto_test +override_dh_auto_test: + (cd ${PODCVD_SOURCE_DIR} && $(GOBIN) test) + dh_auto_test + +.PHONY: override_dh_installinit +override_dh_installinit: + dh_installinit --name=cuttlefish-podcvd + dh_installinit + +.PHONY: override_dh_auto_clean +override_dh_auto_clean: + rm -f $(PODCVD_SOURCE_DIR)/podcvd + dh_auto_clean + +# Debug info was stripped by ldflags=-w +.PHONY: override_dh_dwz +override_dh_dwz: + +# Debug info was stripped by ldflags=-w +.PHONY: override_dh_strip +override_dh_strip: + dh_strip --no-automatic-dbgsym diff --git a/container/debian/source/format b/container/debian/source/format new file mode 100644 index 00000000000..89ae9db8f88 --- /dev/null +++ b/container/debian/source/format @@ -0,0 +1 @@ +3.0 (native) diff --git a/container/debian/source/lintian-overrides b/container/debian/source/lintian-overrides new file mode 100644 index 00000000000..e05e748ec50 --- /dev/null +++ b/container/debian/source/lintian-overrides @@ -0,0 +1,3 @@ +# This is a "local package" for now +cuttlefish-container source: no-nmu-in-changelog +cuttlefish-container source: source-nmu-has-incorrect-version-number