From c9f5353ad369fadf5464b889a25b613f69808c4b Mon Sep 17 00:00:00 2001 From: Tom Cherry Date: Mon, 4 Nov 2019 10:30:36 -0800 Subject: [PATCH] Move init and ueventd scripts from / to /system/etc There is no reason for these scripts to continue to exist in /, when they are better suited for /system/etc. There are problems keeping them at / as well, particularly that they cannot be updated with overlayfs. Bug: 131087886 Bug: 140313207 Test: build/boot Merged-In: I043d9a02ba588ca37ceba2c4e28ed631792b2586 Change-Id: I043d9a02ba588ca37ceba2c4e28ed631792b2586 --- init/Android.bp | 2 ++ init/init.cpp | 2 +- init/ueventd.cpp | 2 +- rootdir/Android.bp | 26 ++++++++++++++++++++++++++ rootdir/Android.mk | 20 ++++---------------- rootdir/init.rc | 6 +++--- 6 files changed, 37 insertions(+), 21 deletions(-) create mode 100644 rootdir/Android.bp diff --git a/init/Android.bp b/init/Android.bp index 776a3a6c4..7ba95828f 100644 --- a/init/Android.bp +++ b/init/Android.bp @@ -183,9 +183,11 @@ cc_binary { static_libs: ["libinit"], required: [ "e2fsdroid", + "init.rc", "mke2fs", "sload_f2fs", "make_f2fs", + "ueventd.rc", ], srcs: ["main.cpp"], symlinks: ["ueventd"], diff --git a/init/init.cpp b/init/init.cpp index f775d8fa0..592d956a0 100644 --- a/init/init.cpp +++ b/init/init.cpp @@ -135,7 +135,7 @@ static void LoadBootScripts(ActionManager& action_manager, ServiceList& service_ std::string bootscript = GetProperty("ro.boot.init_rc", ""); if (bootscript.empty()) { - parser.ParseConfig("/init.rc"); + parser.ParseConfig("/system/etc/init/hw/init.rc"); if (!parser.ParseConfig("/system/etc/init")) { late_import_paths.emplace_back("/system/etc/init"); } diff --git a/init/ueventd.cpp b/init/ueventd.cpp index 59f91ee16..d2b503b4f 100644 --- a/init/ueventd.cpp +++ b/init/ueventd.cpp @@ -288,7 +288,7 @@ int ueventd_main(int argc, char** argv) { // TODO: cleanup platform ueventd.rc to remove vendor specific device node entries (b/34968103) auto hardware = android::base::GetProperty("ro.hardware", ""); - auto ueventd_configuration = ParseConfig({"/ueventd.rc", "/vendor/ueventd.rc", + auto ueventd_configuration = ParseConfig({"/system/etc/ueventd.rc", "/vendor/ueventd.rc", "/odm/ueventd.rc", "/ueventd." + hardware + ".rc"}); uevent_handlers.emplace_back(std::make_unique( diff --git a/rootdir/Android.bp b/rootdir/Android.bp new file mode 100644 index 000000000..96b5e0db4 --- /dev/null +++ b/rootdir/Android.bp @@ -0,0 +1,26 @@ +// Copyright 2019 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. + +prebuilt_etc { + name: "init.rc", + src: "init.rc", + sub_dir: "init/hw", + required: ["fsverity_init"], +} + +prebuilt_etc { + name: "ueventd.rc", + src: "ueventd.rc", + recovery_available: true, +} diff --git a/rootdir/Android.mk b/rootdir/Android.mk index eac3f0693..1228c2c41 100644 --- a/rootdir/Android.mk +++ b/rootdir/Android.mk @@ -1,21 +1,5 @@ LOCAL_PATH:= $(call my-dir) -####################################### -# init.rc -include $(CLEAR_VARS) - -LOCAL_MODULE := init.rc -LOCAL_SRC_FILES := $(LOCAL_MODULE) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT) -LOCAL_REQUIRED_MODULES := fsverity_init - -# The init symlink must be a post install command of a file that is to TARGET_ROOT_OUT. -# Since init.rc is required for init and satisfies that requirement, we hijack it to create the symlink. -LOCAL_POST_INSTALL_CMD := ln -sf /system/bin/init $(TARGET_ROOT_OUT)/init - -include $(BUILD_PREBUILT) - ####################################### # init-debug.rc include $(CLEAR_VARS) @@ -148,6 +132,10 @@ ifeq ($(AB_OTA_UPDATER),true) LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/postinstall endif +# The init symlink must be a post install command of a file that is to TARGET_ROOT_OUT. +# Since init.environ.rc is required for init and satisfies that requirement, we hijack it to create the symlink. +LOCAL_POST_INSTALL_CMD += ; ln -sf /system/bin/init $(TARGET_ROOT_OUT)/init + include $(BUILD_SYSTEM)/base_rules.mk $(LOCAL_BUILT_MODULE): $(LOCAL_PATH)/init.environ.rc.in diff --git a/rootdir/init.rc b/rootdir/init.rc index a8e0f5f11..b7014a3da 100644 --- a/rootdir/init.rc +++ b/rootdir/init.rc @@ -5,11 +5,11 @@ # import /init.environ.rc -import /init.usb.rc +import /system/etc/init/hw/init.usb.rc import /init.${ro.hardware}.rc import /vendor/etc/init/hw/init.${ro.hardware}.rc -import /init.usb.configfs.rc -import /init.${ro.zygote}.rc +import /system/etc/init/hw/init.usb.configfs.rc +import /system/etc/init/hw/init.${ro.zygote}.rc # Cgroups are mounted right before early-init using list from /etc/cgroups.json on early-init