blob: 6db6649b3fb2a53b9627a5d002df86d5138f42cc [file] [log] [blame]
Bertrand SIMONNET83ee6ce2014-10-06 14:20:10 -07001# Copyright 2016 The Chromium OS Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5"""Combine os-release.d fragments into /etc/os-release."""
6
Bertrand SIMONNET83ee6ce2014-10-06 14:20:10 -07007import os
8
9from chromite.lib import commandline
10from chromite.lib import cros_build_lib
11from chromite.lib import osutils
12
13
Andrey Ulanov2568e172016-05-04 17:25:52 -070014def GenerateOsRelease(root, default_params=None):
Bertrand SIMONNET83ee6ce2014-10-06 14:20:10 -070015 """Adds contents of /etc/os-release.d into /etc/os-release
16
17 Args:
18 root: path to the root directory where os-release should be genereated.
Andrey Ulanov2568e172016-05-04 17:25:52 -070019 default_params: a dict of os-release parameters that should be added
20 if not already set.
Bertrand SIMONNET83ee6ce2014-10-06 14:20:10 -070021 """
22 os_release_path = os.path.join(root, 'etc', 'os-release')
23 os_released_path = os.path.join(root, 'etc', 'os-release.d')
24
Bertrand SIMONNET83ee6ce2014-10-06 14:20:10 -070025 mapping = {}
26 if os.path.exists(os_release_path):
27 content = osutils.ReadFile(os_release_path)
28
29 for line in content.splitlines():
30 if line.startswith('#'):
31 continue
32
33 key_value = line.split('=', 1)
34 if len(key_value) != 2:
35 cros_build_lib.Die('Malformed line in /etc/os-release')
36
37 mapping[key_value[0]] = key_value[1].strip()
38
Daniel Campelloe7593042021-05-18 18:26:49 +000039 if os.path.isdir(os_released_path):
40 for filepath in os.listdir(os_released_path):
41 key = os.path.basename(filepath)
42 if key in mapping:
43 cros_build_lib.Die('key %s defined in /etc/os-release.d but already '
44 'defined in /etc/os-release.' % key)
45 mapping[key] = osutils.ReadFile(os.path.join(os_released_path,
46 filepath)).strip('\n')
Bertrand SIMONNET83ee6ce2014-10-06 14:20:10 -070047
Andrey Ulanov2568e172016-05-04 17:25:52 -070048 if default_params:
Mike Frysinger0bdbc102019-06-13 15:27:29 -040049 for key, value in default_params.items():
Andrey Ulanov2568e172016-05-04 17:25:52 -070050 mapping.setdefault(key, value)
51
Bertrand SIMONNET83ee6ce2014-10-06 14:20:10 -070052 osrelease_content = '\n'.join([k + '=' + mapping[k] for k in mapping])
53 osrelease_content += '\n'
54 osutils.WriteFile(os_release_path, osrelease_content)
55
Bertrand SIMONNET83ee6ce2014-10-06 14:20:10 -070056def main(argv):
57 parser = commandline.ArgumentParser(description=__doc__)
58 parser.add_argument('--root', type='path', required=True,
59 help='sysroot of the board')
Andrey Ulanov2568e172016-05-04 17:25:52 -070060 parser.add_argument('--version', help='The image version string.')
61 parser.add_argument('--build_id', help='The image build ID string.')
Bertrand SIMONNET83ee6ce2014-10-06 14:20:10 -070062 options = parser.parse_args(argv)
63 options.Freeze()
64
Andrey Ulanov2568e172016-05-04 17:25:52 -070065 default_params = {
66 'NAME': 'Chromium OS',
67 'ID': 'chromiumos',
68 'HOME_URL': 'https://www.chromium.org/chromium-os',
69 'BUG_REPORT_URL': 'https://crbug.com/new',
70 }
71
72 if options.version:
73 default_params['VERSION'] = options.version
74 default_params['VERSION_ID'] = options.version
75 if options.build_id:
76 default_params['BUILD_ID'] = options.build_id
77
78 GenerateOsRelease(options.root, default_params)