blob: 75677044024b839489a177b93e2c6b9ceebb294d [file] [log] [blame]
# Copyright 2016 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Combine os-release.d fragments into /etc/os-release."""
import os
from chromite.lib import commandline
from chromite.lib import cros_build_lib
from chromite.lib import osutils
def GenerateOsRelease(root, default_params=None) -> None:
"""Adds contents of /etc/os-release.d into /etc/os-release
Args:
root: path to the root directory where os-release should be generated.
default_params: a dict of os-release parameters that should be added if
not already set.
"""
os_release_path = os.path.join(root, "etc", "os-release")
os_released_path = os.path.join(root, "etc", "os-release.d")
mapping = {}
if os.path.exists(os_release_path):
content = osutils.ReadFile(os_release_path)
for line in content.splitlines():
if line.startswith("#"):
continue
key_value = line.split("=", 1)
if len(key_value) != 2:
cros_build_lib.Die("Malformed line in /etc/os-release")
mapping[key_value[0]] = key_value[1].strip()
if os.path.isdir(os_released_path):
for filepath in os.listdir(os_released_path):
key = os.path.basename(filepath)
if key in mapping:
cros_build_lib.Die(
"key %s defined in /etc/os-release.d but already "
"defined in /etc/os-release." % key
)
mapping[key] = osutils.ReadFile(
os.path.join(os_released_path, filepath)
).strip("\n")
if default_params:
for key, value in default_params.items():
mapping.setdefault(key, value)
# TODO(b/236161656): Fix.
# pylint: disable-next=consider-using-dict-items
osrelease_content = "\n".join([k + "=" + mapping[k] for k in mapping])
osrelease_content += "\n"
osutils.WriteFile(os_release_path, osrelease_content)
def main(argv) -> None:
parser = commandline.ArgumentParser(description=__doc__)
parser.add_argument(
"--root", type="str_path", required=True, help="sysroot of the board"
)
parser.add_argument("--version", help="The image version string.")
parser.add_argument("--build_id", help="The image build ID string.")
options = parser.parse_args(argv)
options.Freeze()
default_params = {
"NAME": "Chromium OS",
"ID": "chromiumos",
"HOME_URL": "https://www.chromium.org/chromium-os",
"BUG_REPORT_URL": "https://crbug.com/new",
}
if options.version:
default_params["VERSION"] = options.version
default_params["VERSION_ID"] = options.version
if options.build_id:
default_params["BUILD_ID"] = options.build_id
GenerateOsRelease(options.root, default_params)