blob: 47c184109d06c9380e877f4b866a6103675df422 [file] [log] [blame]
# -*- coding: utf-8 -*-
# Copyright 2016 The Chromium OS Authors. All rights reserved.
# 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."""
from __future__ import print_function
import os
import sys
from chromite.lib import commandline
from chromite.lib import cros_build_lib
from chromite.lib import osutils
assert sys.version_info >= (3, 6), 'This module requires Python 3.6+'
def GenerateOsRelease(root, default_params=None):
"""Adds contents of /etc/os-release.d into /etc/os-release
root: path to the root directory where os-release should be genereated.
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')
if not os.path.isdir(os_released_path):
# /etc/os-release.d does not exist, no need to regenerate /etc/os-release.
mapping = {}
if os.path.exists(os_release_path):
content = osutils.ReadFile(os_release_path)
for line in content.splitlines():
if line.startswith('#'):
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()
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,
if default_params:
for key, value in default_params.items():
mapping.setdefault(key, value)
osrelease_content = '\n'.join([k + '=' + mapping[k] for k in mapping])
osrelease_content += '\n'
osutils.WriteFile(os_release_path, osrelease_content)
def main(argv):
parser = commandline.ArgumentParser(description=__doc__)
parser.add_argument('--root', type='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)
default_params = {
'NAME': 'Chromium OS',
'ID': 'chromiumos',
'HOME_URL': '',
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)