StarlingX open source release updates
Signed-off-by: Dean Troyer <dtroyer@gmail.com>
This commit is contained in:
parent
7f0544bc4b
commit
18922761a6
8
CONTRIBUTORS.wrs
Normal file
8
CONTRIBUTORS.wrs
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
The following contributors from Wind River have developed the seed code in this
|
||||||
|
repository. We look forward to community collaboration and contributions for
|
||||||
|
additional features, enhancements and refactoring.
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
=============
|
||||||
|
Eric Macdonald <Eric.MacDonald@windriver.com>
|
||||||
|
Don Penney <Don.Penney@windriver.com>
|
202
LICENSE
Normal file
202
LICENSE
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
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.
|
5
README.rst
Normal file
5
README.rst
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
=========
|
||||||
|
stx-metal
|
||||||
|
=========
|
||||||
|
|
||||||
|
StarlingX Bare Metal Management
|
297
bsp-files/centos-ks-gen.pl
Executable file
297
bsp-files/centos-ks-gen.pl
Executable file
@ -0,0 +1,297 @@
|
|||||||
|
#!/usr/bin/perl
|
||||||
|
#
|
||||||
|
# Copyright (c) 2017 Wind River Systems, Inc.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use Getopt::Long;
|
||||||
|
use POSIX qw(strftime);
|
||||||
|
|
||||||
|
# Defines the current list of YOW boot servers
|
||||||
|
my %boot_servers = ("yow-tuxlab", "128.224.150.9",
|
||||||
|
"yow-tuxlab2", "128.224.151.254",
|
||||||
|
"yow", "128.224.150.9"); # obsolete; kept for backwards compatibility
|
||||||
|
|
||||||
|
my $PLATFORM_RELEASE;
|
||||||
|
my $files_dir;
|
||||||
|
my $output_dir = 'generated';
|
||||||
|
my $pxeboot_output_dir = 'pxeboot';
|
||||||
|
my $extra_output_dir = 'extra_cfgs';
|
||||||
|
|
||||||
|
GetOptions("release=s" => \$PLATFORM_RELEASE,
|
||||||
|
"basedir=s" => \$files_dir);
|
||||||
|
|
||||||
|
die "Please specify release with --release" if (!$PLATFORM_RELEASE);
|
||||||
|
if (!$files_dir)
|
||||||
|
{
|
||||||
|
$files_dir = '.';
|
||||||
|
}
|
||||||
|
|
||||||
|
my $BOOT_SERVER = "none";
|
||||||
|
|
||||||
|
my $template_dir = "$files_dir/kickstarts";
|
||||||
|
|
||||||
|
system("mkdir -p ${output_dir}");
|
||||||
|
|
||||||
|
# Write USB image files
|
||||||
|
write_config_file("controller",
|
||||||
|
"${output_dir}/controller_ks.cfg", "filter_out_from_controller",
|
||||||
|
"pre_common_head.cfg",
|
||||||
|
"pre_pkglist.cfg",
|
||||||
|
"pre_disk_setup_common.cfg",
|
||||||
|
"pre_disk_controller.cfg",
|
||||||
|
"post_platform_conf_controller.cfg",
|
||||||
|
"post_common.cfg",
|
||||||
|
"post_kernel_controller.cfg",
|
||||||
|
"post_lvm_pv_on_rootfs.cfg",
|
||||||
|
"post_usb_controller.cfg");
|
||||||
|
write_config_file("controller-compute",
|
||||||
|
"${output_dir}/smallsystem_ks.cfg", "filter_out_from_smallsystem",
|
||||||
|
"pre_common_head.cfg",
|
||||||
|
"pre_pkglist.cfg",
|
||||||
|
"pre_disk_setup_common.cfg",
|
||||||
|
"pre_disk_aio.cfg",
|
||||||
|
"post_platform_conf_aio.cfg",
|
||||||
|
"post_common.cfg",
|
||||||
|
"post_kernel_aio_and_compute.cfg",
|
||||||
|
"post_lvm_pv_on_rootfs.cfg",
|
||||||
|
"post_system_aio.cfg",
|
||||||
|
"post_usb_controller.cfg");
|
||||||
|
write_config_file("controller-compute-lowlatency",
|
||||||
|
"${output_dir}/smallsystem_lowlatency_ks.cfg", "filter_out_from_smallsystem_lowlatency",
|
||||||
|
"pre_common_head.cfg",
|
||||||
|
"pre_pkglist_lowlatency.cfg",
|
||||||
|
"pre_disk_setup_common.cfg",
|
||||||
|
"pre_disk_aio.cfg",
|
||||||
|
"post_platform_conf_aio_lowlatency.cfg",
|
||||||
|
"post_common.cfg",
|
||||||
|
"post_kernel_aio_and_compute.cfg",
|
||||||
|
"post_lvm_pv_on_rootfs.cfg",
|
||||||
|
"post_system_aio.cfg",
|
||||||
|
"post_usb_controller.cfg");
|
||||||
|
|
||||||
|
system("mkdir -p ${pxeboot_output_dir}");
|
||||||
|
|
||||||
|
# Write PXE boot files
|
||||||
|
write_config_file("controller",
|
||||||
|
"${pxeboot_output_dir}/pxeboot_controller.cfg", "filter_out_from_controller",
|
||||||
|
"pre_common_head.cfg",
|
||||||
|
"pre_pkglist.cfg",
|
||||||
|
"pre_disk_setup_common.cfg",
|
||||||
|
"pre_disk_controller.cfg",
|
||||||
|
"post_platform_conf_controller.cfg",
|
||||||
|
"post_common.cfg",
|
||||||
|
"post_kernel_controller.cfg",
|
||||||
|
"post_lvm_pv_on_rootfs.cfg",
|
||||||
|
"post_pxeboot_controller.cfg");
|
||||||
|
write_config_file("controller-compute",
|
||||||
|
"${pxeboot_output_dir}/pxeboot_smallsystem.cfg", "filter_out_from_smallsystem",
|
||||||
|
"pre_common_head.cfg",
|
||||||
|
"pre_pkglist.cfg",
|
||||||
|
"pre_disk_setup_common.cfg",
|
||||||
|
"pre_disk_aio.cfg",
|
||||||
|
"post_platform_conf_aio.cfg",
|
||||||
|
"post_common.cfg",
|
||||||
|
"post_kernel_aio_and_compute.cfg",
|
||||||
|
"post_lvm_pv_on_rootfs.cfg",
|
||||||
|
"post_system_aio.cfg",
|
||||||
|
"post_pxeboot_controller.cfg");
|
||||||
|
write_config_file("controller-compute-lowlatency",
|
||||||
|
"${pxeboot_output_dir}/pxeboot_smallsystem_lowlatency.cfg", "filter_out_from_smallsystem_lowlatency",
|
||||||
|
"pre_common_head.cfg",
|
||||||
|
"pre_pkglist_lowlatency.cfg",
|
||||||
|
"pre_disk_setup_common.cfg",
|
||||||
|
"pre_disk_aio.cfg",
|
||||||
|
"post_platform_conf_aio_lowlatency.cfg",
|
||||||
|
"post_common.cfg",
|
||||||
|
"post_kernel_aio_and_compute.cfg",
|
||||||
|
"post_lvm_pv_on_rootfs.cfg",
|
||||||
|
"post_system_aio.cfg",
|
||||||
|
"post_pxeboot_controller.cfg");
|
||||||
|
|
||||||
|
|
||||||
|
# Write same net files
|
||||||
|
write_config_file("controller",
|
||||||
|
"${output_dir}/net_controller_ks.cfg", "filter_out_from_controller",
|
||||||
|
"pre_common_head.cfg",
|
||||||
|
"pre_pkglist.cfg",
|
||||||
|
"pre_disk_setup_common.cfg",
|
||||||
|
"pre_disk_controller.cfg",
|
||||||
|
"post_platform_conf_controller.cfg",
|
||||||
|
"post_common.cfg",
|
||||||
|
"post_kernel_controller.cfg",
|
||||||
|
"post_lvm_pv_on_rootfs.cfg",
|
||||||
|
"post_net_controller.cfg",
|
||||||
|
"post_net_common.cfg");
|
||||||
|
write_config_file("controller-compute",
|
||||||
|
"${output_dir}/net_smallsystem_ks.cfg", "filter_out_from_smallsystem",
|
||||||
|
"pre_common_head.cfg",
|
||||||
|
"pre_pkglist.cfg",
|
||||||
|
"pre_disk_setup_common.cfg",
|
||||||
|
"pre_disk_aio.cfg",
|
||||||
|
"post_platform_conf_aio.cfg",
|
||||||
|
"post_common.cfg",
|
||||||
|
"post_kernel_aio_and_compute.cfg",
|
||||||
|
"post_lvm_pv_on_rootfs.cfg",
|
||||||
|
"post_system_aio.cfg",
|
||||||
|
"post_net_controller.cfg",
|
||||||
|
"post_net_common.cfg");
|
||||||
|
write_config_file("controller-compute-lowlatency",
|
||||||
|
"${output_dir}/net_smallsystem_lowlatency_ks.cfg", "filter_out_from_smallsystem_lowlatency",
|
||||||
|
"pre_common_head.cfg",
|
||||||
|
"pre_pkglist_lowlatency.cfg",
|
||||||
|
"pre_disk_setup_common.cfg",
|
||||||
|
"pre_disk_aio.cfg",
|
||||||
|
"post_platform_conf_aio_lowlatency.cfg",
|
||||||
|
"post_common.cfg",
|
||||||
|
"post_kernel_aio_and_compute.cfg",
|
||||||
|
"post_lvm_pv_on_rootfs.cfg",
|
||||||
|
"post_system_aio.cfg",
|
||||||
|
"post_net_controller.cfg",
|
||||||
|
"post_net_common.cfg");
|
||||||
|
write_config_file("compute",
|
||||||
|
"${output_dir}/net_compute_ks.cfg", "filter_out_from_compute",
|
||||||
|
"pre_common_head.cfg",
|
||||||
|
"pre_pkglist.cfg",
|
||||||
|
"pre_disk_setup_common.cfg",
|
||||||
|
"pre_disk_compute.cfg",
|
||||||
|
"post_platform_conf_compute.cfg",
|
||||||
|
"post_common.cfg",
|
||||||
|
"post_kernel_aio_and_compute.cfg",
|
||||||
|
"post_lvm_no_pv_on_rootfs.cfg",
|
||||||
|
"post_net_common.cfg");
|
||||||
|
write_config_file("compute-lowlatency",
|
||||||
|
"${output_dir}/net_compute_lowlatency_ks.cfg", "filter_out_from_compute_lowlatency",
|
||||||
|
"pre_common_head.cfg",
|
||||||
|
"pre_pkglist_lowlatency.cfg",
|
||||||
|
"pre_disk_setup_common.cfg",
|
||||||
|
"pre_disk_compute.cfg",
|
||||||
|
"post_platform_conf_compute_lowlatency.cfg",
|
||||||
|
"post_common.cfg",
|
||||||
|
"post_kernel_aio_and_compute.cfg",
|
||||||
|
"post_lvm_no_pv_on_rootfs.cfg",
|
||||||
|
"post_net_common.cfg");
|
||||||
|
write_config_file("storage",
|
||||||
|
"${output_dir}/net_storage_ks.cfg", "filter_out_from_storage",
|
||||||
|
"pre_common_head.cfg",
|
||||||
|
"pre_pkglist.cfg",
|
||||||
|
"pre_disk_setup_common.cfg",
|
||||||
|
"pre_disk_storage.cfg",
|
||||||
|
"post_platform_conf_storage.cfg",
|
||||||
|
"post_common.cfg",
|
||||||
|
"post_kernel_storage.cfg",
|
||||||
|
"post_lvm_pv_on_rootfs.cfg",
|
||||||
|
"post_net_common.cfg");
|
||||||
|
|
||||||
|
system("mkdir -p ${extra_output_dir}");
|
||||||
|
|
||||||
|
# write Ottawa Lab files
|
||||||
|
my $server;
|
||||||
|
foreach $server (keys %boot_servers)
|
||||||
|
{
|
||||||
|
$BOOT_SERVER = $boot_servers{$server};
|
||||||
|
|
||||||
|
write_config_file("controller",
|
||||||
|
"${extra_output_dir}/${server}_controller.cfg", "filter_out_from_controller",
|
||||||
|
"pre_common_head.cfg",
|
||||||
|
"pre_pkglist.cfg",
|
||||||
|
"pre_disk_setup_common.cfg",
|
||||||
|
"pre_disk_controller.cfg",
|
||||||
|
"post_platform_conf_controller.cfg",
|
||||||
|
"post_common.cfg",
|
||||||
|
"post_kernel_controller.cfg",
|
||||||
|
"post_lvm_pv_on_rootfs.cfg",
|
||||||
|
"post_yow_controller.cfg");
|
||||||
|
write_config_file("controller-compute",
|
||||||
|
"${extra_output_dir}/${server}_smallsystem.cfg", "filter_out_from_smallsystem",
|
||||||
|
"pre_common_head.cfg",
|
||||||
|
"pre_pkglist.cfg",
|
||||||
|
"pre_disk_setup_common.cfg",
|
||||||
|
"pre_disk_aio.cfg",
|
||||||
|
"post_platform_conf_aio.cfg",
|
||||||
|
"post_common.cfg",
|
||||||
|
"post_kernel_aio_and_compute.cfg",
|
||||||
|
"post_lvm_pv_on_rootfs.cfg",
|
||||||
|
"post_system_aio.cfg",
|
||||||
|
"post_yow_controller.cfg");
|
||||||
|
write_config_file("controller-compute-lowlatency",
|
||||||
|
"${extra_output_dir}/${server}_smallsystem_lowlatency.cfg", "filter_out_from_smallsystem_lowlatency",
|
||||||
|
"pre_common_head.cfg",
|
||||||
|
"pre_pkglist_lowlatency.cfg",
|
||||||
|
"pre_disk_setup_common.cfg",
|
||||||
|
"pre_disk_aio.cfg",
|
||||||
|
"post_platform_conf_aio_lowlatency.cfg",
|
||||||
|
"post_common.cfg",
|
||||||
|
"post_kernel_aio_and_compute.cfg",
|
||||||
|
"post_lvm_pv_on_rootfs.cfg",
|
||||||
|
"post_system_aio.cfg",
|
||||||
|
"post_yow_controller.cfg");
|
||||||
|
}
|
||||||
|
|
||||||
|
exit 0;
|
||||||
|
|
||||||
|
#------------------------#
|
||||||
|
|
||||||
|
sub write_config_file {
|
||||||
|
my ($personality, $ksout, $filter_file, @templates) = @_;
|
||||||
|
my %filter;
|
||||||
|
if ($filter_file ne "") {
|
||||||
|
if (!(open(FILTER, "$files_dir/$filter_file"))) {
|
||||||
|
die "Could not open template $files_dir/$filter_file";
|
||||||
|
}
|
||||||
|
while (<FILTER>) {
|
||||||
|
chop();
|
||||||
|
next if ($_ =~ /^#/);
|
||||||
|
$filter{$_} = 1;
|
||||||
|
}
|
||||||
|
close(FILTER);
|
||||||
|
}
|
||||||
|
print "Writing: $ksout\n";
|
||||||
|
open(OUT, ">$ksout") || die "Could not write $ksout";
|
||||||
|
|
||||||
|
my $year = strftime "%Y", localtime;
|
||||||
|
print OUT "#\n";
|
||||||
|
print OUT "# Copyright (c) $year Wind River Systems, Inc.\n";
|
||||||
|
print OUT "# SPDX-License-Identifier: Apache-2.0\n";
|
||||||
|
print OUT "#\n";
|
||||||
|
print OUT "\n";
|
||||||
|
|
||||||
|
# Add functions header
|
||||||
|
foreach my $block ("\%pre", "\%post") {
|
||||||
|
if (!(open(FUNCTIONS, "$template_dir/functions.sh"))) {
|
||||||
|
die "Could not open functions.sh";
|
||||||
|
}
|
||||||
|
print OUT "$block\n";
|
||||||
|
while (<FUNCTIONS>) {
|
||||||
|
s/xxxPLATFORM_RELEASExxx/$PLATFORM_RELEASE/g;
|
||||||
|
s/xxxBOOT_SERVERxxx/$BOOT_SERVER/g;
|
||||||
|
s/xxxYEARxxx/$year/g;
|
||||||
|
print OUT $_;
|
||||||
|
}
|
||||||
|
print OUT "\%end\n\n";
|
||||||
|
close FUNCTIONS;
|
||||||
|
}
|
||||||
|
|
||||||
|
my $template;
|
||||||
|
foreach $template (@templates) {
|
||||||
|
if (!(open(TEMPLATE_IN, "$template_dir/$template"))) {
|
||||||
|
die "Could not open template $template_dir/$template";
|
||||||
|
}
|
||||||
|
print OUT "\n# Template from: $template\n";
|
||||||
|
while (<TEMPLATE_IN>) {
|
||||||
|
$_ =~ s/\n$//;
|
||||||
|
s/xxxPLATFORM_RELEASExxx/$PLATFORM_RELEASE/g;
|
||||||
|
s/xxxBOOT_SERVERxxx/$BOOT_SERVER/g;
|
||||||
|
s/xxxYEARxxx/$year/g;
|
||||||
|
|
||||||
|
s/xxxPACKAGE_LISTxxx/\@platform-$personality\n\@updates-$personality/;
|
||||||
|
|
||||||
|
print OUT "$_\n";
|
||||||
|
}
|
||||||
|
close(TEMPLATE_IN);
|
||||||
|
}
|
||||||
|
|
||||||
|
close(OUT);
|
||||||
|
}
|
188
bsp-files/centos.syslinux.cfg
Normal file
188
bsp-files/centos.syslinux.cfg
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
display splash.cfg
|
||||||
|
timeout 0
|
||||||
|
F1 help.txt
|
||||||
|
F2 devices.txt
|
||||||
|
F3 splash.cfg
|
||||||
|
serial 0 115200
|
||||||
|
|
||||||
|
# Pull in the menu User Interface
|
||||||
|
ui vesamenu.c32
|
||||||
|
|
||||||
|
menu title Select kernel options and boot kernel
|
||||||
|
menu tabmsg Press [Tab] to edit, [Return] to select, [ESC] to return to previous menu
|
||||||
|
|
||||||
|
# Dark grey
|
||||||
|
menu background #ff555555
|
||||||
|
|
||||||
|
# ----------------- NOTE -----------------
|
||||||
|
# If you are updating label numbers, make sure that controllerconfig/clone.py
|
||||||
|
# is in sync with your changes (only serial console entries).
|
||||||
|
# STANDARD_STANDARD = '0'
|
||||||
|
# STANDARD_EXTENDED = 'S0'
|
||||||
|
# AIO_STANDARD = '2'
|
||||||
|
# AIO_EXTENDED = 'S2'
|
||||||
|
# AIO_LL_STANDARD = '4'
|
||||||
|
# AIO_LL_EXTENDED = 'S4'
|
||||||
|
# ----------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
# Standard Controller menu
|
||||||
|
menu begin
|
||||||
|
menu title Standard Controller Configuration
|
||||||
|
# Serial Console submenu
|
||||||
|
menu begin
|
||||||
|
menu title Serial Console
|
||||||
|
label 0
|
||||||
|
menu label STANDARD Security Boot Profile
|
||||||
|
text help
|
||||||
|
Standard Controller, console=ttyS0
|
||||||
|
Standard Security Profile Enabled (default setting)
|
||||||
|
endtext
|
||||||
|
kernel vmlinuz
|
||||||
|
initrd initrd.img
|
||||||
|
append rootwait console=ttyS0,115200 inst.text serial inst.stage2=hd:LABEL=oe_iso_boot inst.ks=hd:LABEL=oe_iso_boot:/ks.cfg boot_device=sda rootfs_device=sda biosdevname=0 usbcore.autosuspend=-1 inst.gpt security_profile=standard
|
||||||
|
|
||||||
|
label S0
|
||||||
|
menu label EXTENDED Security Boot Profile
|
||||||
|
text help
|
||||||
|
Standard Controller, console=ttyS0
|
||||||
|
Extended Security Profile Enabled (will impact performance)
|
||||||
|
endtext
|
||||||
|
kernel vmlinuz
|
||||||
|
initrd initrd.img
|
||||||
|
append rootwait console=ttyS0,115200 inst.text serial inst.stage2=hd:LABEL=oe_iso_boot inst.ks=hd:LABEL=oe_iso_boot:/ks.cfg boot_device=sda rootfs_device=sda biosdevname=0 usbcore.autosuspend=-1 inst.gpt security_profile=extended
|
||||||
|
menu end
|
||||||
|
|
||||||
|
# Graphical Console submenu
|
||||||
|
menu begin
|
||||||
|
menu title Graphical Console
|
||||||
|
label 1
|
||||||
|
menu label STANDARD Security Boot Profile
|
||||||
|
text help
|
||||||
|
Standard Controller, console=tty0
|
||||||
|
Standard Security Profile Enabled (default setting)
|
||||||
|
endtext
|
||||||
|
kernel vmlinuz
|
||||||
|
initrd initrd.img
|
||||||
|
append rootwait console=tty0 inst.text inst.stage2=hd:LABEL=oe_iso_boot inst.ks=hd:LABEL=oe_iso_boot:/ks.cfg boot_device=sda rootfs_device=sda biosdevname=0 usbcore.autosuspend=-1 inst.gpt security_profile=standard
|
||||||
|
|
||||||
|
label S1
|
||||||
|
menu label EXTENDED Security Boot Profile
|
||||||
|
text help
|
||||||
|
Standard Controller, console=tty0
|
||||||
|
Extended Security Profile Enabled (will impact performance)
|
||||||
|
endtext
|
||||||
|
kernel vmlinuz
|
||||||
|
initrd initrd.img
|
||||||
|
append rootwait console=tty0 inst.text inst.stage2=hd:LABEL=oe_iso_boot inst.ks=hd:LABEL=oe_iso_boot:/ks.cfg boot_device=sda rootfs_device=sda biosdevname=0 usbcore.autosuspend=-1 inst.gpt security_profile=extended
|
||||||
|
menu end
|
||||||
|
menu end
|
||||||
|
|
||||||
|
menu SEPARATOR
|
||||||
|
|
||||||
|
# AIO Controller menu
|
||||||
|
menu begin
|
||||||
|
menu title All-in-one Controller Configuration
|
||||||
|
# Serial Console submenu
|
||||||
|
menu begin
|
||||||
|
menu title Serial Console
|
||||||
|
label 2
|
||||||
|
menu label STANDARD Security Boot Profile
|
||||||
|
text help
|
||||||
|
All-in-one Controller, console=ttyS0
|
||||||
|
Standard Security Profile Enabled (default setting)
|
||||||
|
endtext
|
||||||
|
kernel vmlinuz
|
||||||
|
initrd initrd.img
|
||||||
|
append rootwait console=ttyS0,115200 inst.text serial inst.stage2=hd:LABEL=oe_iso_boot inst.ks=hd:LABEL=oe_iso_boot:/smallsystem_ks.cfg boot_device=sda rootfs_device=sda biosdevname=0 usbcore.autosuspend=-1 inst.gpt security_profile=standard
|
||||||
|
|
||||||
|
label S2
|
||||||
|
menu label EXTENDED Security Boot Profile
|
||||||
|
text help
|
||||||
|
All-in-one Controller, console=ttyS0
|
||||||
|
Extended Security Profile Enabled (will impact performance)
|
||||||
|
endtext
|
||||||
|
kernel vmlinuz
|
||||||
|
initrd initrd.img
|
||||||
|
# Security profile option
|
||||||
|
append rootwait console=ttyS0,115200 inst.text serial inst.stage2=hd:LABEL=oe_iso_boot inst.ks=hd:LABEL=oe_iso_boot:/smallsystem_ks.cfg boot_device=sda rootfs_device=sda biosdevname=0 usbcore.autosuspend=-1 inst.gpt security_profile=extended
|
||||||
|
menu end
|
||||||
|
|
||||||
|
# Graphical Console submenu
|
||||||
|
menu begin
|
||||||
|
menu title Graphical Console
|
||||||
|
label 3
|
||||||
|
menu label STANDARD Security Boot Profile
|
||||||
|
text help
|
||||||
|
All-in-one Controller, console=tty0
|
||||||
|
Standard Security Profile Enabled (default setting)
|
||||||
|
endtext
|
||||||
|
kernel vmlinuz
|
||||||
|
initrd initrd.img
|
||||||
|
append rootwait console=tty0 inst.text inst.stage2=hd:LABEL=oe_iso_boot inst.ks=hd:LABEL=oe_iso_boot:/smallsystem_ks.cfg boot_device=sda rootfs_device=sda biosdevname=0 usbcore.autosuspend=-1 inst.gpt security_profile=standard
|
||||||
|
|
||||||
|
label S3
|
||||||
|
menu label EXTENDED Security Boot Profile
|
||||||
|
text help
|
||||||
|
All-in-one Controller, console=tty0
|
||||||
|
Extended Security Profile Enabled (will impact performance)
|
||||||
|
endtext
|
||||||
|
kernel vmlinuz
|
||||||
|
initrd initrd.img
|
||||||
|
append rootwait console=tty0 inst.text inst.stage2=hd:LABEL=oe_iso_boot inst.ks=hd:LABEL=oe_iso_boot:/smallsystem_ks.cfg boot_device=sda rootfs_device=sda biosdevname=0 usbcore.autosuspend=-1 inst.gpt security_profile=extended
|
||||||
|
menu end
|
||||||
|
menu end
|
||||||
|
|
||||||
|
menu SEPARATOR
|
||||||
|
|
||||||
|
# AIO (Low Latency) Controller menu
|
||||||
|
menu begin
|
||||||
|
menu title All-in-one (lowlatency) Controller Configuration
|
||||||
|
# Serial Console submenu
|
||||||
|
menu begin
|
||||||
|
menu title Serial Console
|
||||||
|
label 4
|
||||||
|
menu label STANDARD Security Boot Profile
|
||||||
|
text help
|
||||||
|
All-in-one (lowlatency) Controller, console=ttyS0
|
||||||
|
Standard Security Profile Enabled (default setting)
|
||||||
|
endtext
|
||||||
|
kernel vmlinuz
|
||||||
|
initrd initrd.img
|
||||||
|
append rootwait console=ttyS0,115200 inst.text serial inst.stage2=hd:LABEL=oe_iso_boot inst.ks=hd:LABEL=oe_iso_boot:/smallsystem_lowlatency_ks.cfg boot_device=sda rootfs_device=sda biosdevname=0 usbcore.autosuspend=-1 inst.gpt security_profile=standard
|
||||||
|
|
||||||
|
label S4
|
||||||
|
menu label EXTENDED Security Boot Profile
|
||||||
|
text help
|
||||||
|
All-in-one (lowlatency) Controller, console=ttyS0
|
||||||
|
Extended Security Profile Enabled (will impact performance)
|
||||||
|
endtext
|
||||||
|
kernel vmlinuz
|
||||||
|
initrd initrd.img
|
||||||
|
append rootwait console=ttyS0,115200 inst.text serial inst.stage2=hd:LABEL=oe_iso_boot inst.ks=hd:LABEL=oe_iso_boot:/smallsystem_lowlatency_ks.cfg boot_device=sda rootfs_device=sda biosdevname=0 usbcore.autosuspend=-1 inst.gpt security_profile=extended
|
||||||
|
menu end
|
||||||
|
|
||||||
|
# Graphical Console submenu
|
||||||
|
menu begin
|
||||||
|
menu title Graphical Console
|
||||||
|
label 5
|
||||||
|
menu label STANDARD Security Boot Profile
|
||||||
|
text help
|
||||||
|
All-in-one (lowlatency) Controller, console=tty0
|
||||||
|
Standard Security Profile Enabled (default setting)
|
||||||
|
endtext
|
||||||
|
kernel vmlinuz
|
||||||
|
initrd initrd.img
|
||||||
|
append rootwait console=tty0 inst.text inst.stage2=hd:LABEL=oe_iso_boot inst.ks=hd:LABEL=oe_iso_boot:/smallsystem_lowlatency_ks.cfg boot_device=sda rootfs_device=sda biosdevname=0 usbcore.autosuspend=-1 inst.gpt security_profile=standard
|
||||||
|
|
||||||
|
label S5
|
||||||
|
menu label EXTENDED Security Boot Profile
|
||||||
|
text help
|
||||||
|
All-in-one (lowlatency) Controller, console=tty0
|
||||||
|
Extended Security Profile Enabled (will impact performance)
|
||||||
|
endtext
|
||||||
|
kernel vmlinuz
|
||||||
|
initrd initrd.img
|
||||||
|
append rootwait console=tty0 inst.text inst.stage2=hd:LABEL=oe_iso_boot inst.ks=hd:LABEL=oe_iso_boot:/smallsystem_lowlatency_ks.cfg boot_device=sda rootfs_device=sda biosdevname=0 usbcore.autosuspend=-1 inst.gpt security_profile=extended
|
||||||
|
menu end
|
||||||
|
menu end
|
263
bsp-files/filter_out_from_compute
Normal file
263
bsp-files/filter_out_from_compute
Normal file
@ -0,0 +1,263 @@
|
|||||||
|
ceilometer-api
|
||||||
|
ceilometer-alarm-evaluator
|
||||||
|
ceilometer-alarm-notifier
|
||||||
|
ceilometer-collector
|
||||||
|
ceilometer-tests
|
||||||
|
ceph-manager
|
||||||
|
cgcs-dpdk-rt
|
||||||
|
cgcs-dpdk-rt-dev
|
||||||
|
cgcs-dpdk-rt-staticdev
|
||||||
|
cgcs-dpdk-rt-apps
|
||||||
|
cgts-client
|
||||||
|
cgts-client-bash-completion
|
||||||
|
cgcs-patch-controller
|
||||||
|
cgts-mtce-control
|
||||||
|
cgts-mtce-storage
|
||||||
|
cgts-mtce-common-guestAgent
|
||||||
|
cgtssys
|
||||||
|
cinder
|
||||||
|
cinder-api
|
||||||
|
cinder-scheduler
|
||||||
|
cinder-tests
|
||||||
|
cinder-volume
|
||||||
|
computeconfig-subfunction
|
||||||
|
configvalidator
|
||||||
|
controllerconfig
|
||||||
|
corosync
|
||||||
|
createrepo
|
||||||
|
d2to1
|
||||||
|
distributedcloud-dcmanager
|
||||||
|
distributedcloud-client-dcmanagerclient
|
||||||
|
distributedcloud-dcorch
|
||||||
|
drbd-tools
|
||||||
|
fm-doc
|
||||||
|
glance
|
||||||
|
glance-api
|
||||||
|
glance-registry
|
||||||
|
glance-tests
|
||||||
|
horizon
|
||||||
|
horizon-standalone
|
||||||
|
horizon-tests
|
||||||
|
heat-api-cfn
|
||||||
|
heat-api
|
||||||
|
heat-cfn
|
||||||
|
heat-common
|
||||||
|
heat-contrib-nova-flavor
|
||||||
|
heat-engine
|
||||||
|
heat-templates
|
||||||
|
heat-tests
|
||||||
|
io-monitor
|
||||||
|
isomd5sum
|
||||||
|
kernel-module-openvswitch
|
||||||
|
keystone
|
||||||
|
keystone-tests
|
||||||
|
ldapscripts
|
||||||
|
libconfig-general-perl
|
||||||
|
libssh2
|
||||||
|
lighttpd-module-access
|
||||||
|
lighttpd-module-accesslog
|
||||||
|
lighttpd-module-dirlisting
|
||||||
|
lighttpd-module-indexfile
|
||||||
|
lighttpd-module-proxy
|
||||||
|
lighttpd-module-staticfile
|
||||||
|
lighttpd
|
||||||
|
nodejs
|
||||||
|
nova-api
|
||||||
|
nova-conductor
|
||||||
|
nova-consoleauth
|
||||||
|
nova-controller
|
||||||
|
nova-network
|
||||||
|
nova-novncproxy
|
||||||
|
nova-scheduler
|
||||||
|
nova-spicehtml5proxy
|
||||||
|
nova-tests
|
||||||
|
nova-api-proxy
|
||||||
|
nova-placement-api
|
||||||
|
novnc
|
||||||
|
net-snmp
|
||||||
|
openldap-backend-bdb
|
||||||
|
openldap-backend-dnssrv
|
||||||
|
openldap-backend-hdb
|
||||||
|
openldap-backend-ldap
|
||||||
|
openldap-backend-mdb
|
||||||
|
openldap-backend-meta
|
||||||
|
openldap-backend-monitor
|
||||||
|
openldap-backend-null
|
||||||
|
openldap-backend-passwd
|
||||||
|
openldap-backend-shell
|
||||||
|
openldap-backends
|
||||||
|
openldap-dbg
|
||||||
|
openldap-doc
|
||||||
|
openldap-overlay-proxycache
|
||||||
|
openldap-overlay-syncprov
|
||||||
|
openldap-servers
|
||||||
|
openldap-slapd
|
||||||
|
openstack-ras
|
||||||
|
pacemaker
|
||||||
|
pacemaker-cli
|
||||||
|
pacemaker-cluster-libs
|
||||||
|
pacemaker-libs
|
||||||
|
patch-alarm
|
||||||
|
patching-controller
|
||||||
|
pbr
|
||||||
|
pecan
|
||||||
|
postgresql-client
|
||||||
|
postgresql-contrib
|
||||||
|
postgresql-timezone
|
||||||
|
postgresql
|
||||||
|
pxe-network-installer
|
||||||
|
python-cephclient
|
||||||
|
python-cinder
|
||||||
|
python-django
|
||||||
|
python-django-appconf
|
||||||
|
python-django-compressor
|
||||||
|
python-django-openstack-auth
|
||||||
|
python-glance
|
||||||
|
python2-gunicorn
|
||||||
|
python-heatclient
|
||||||
|
python-heatclient-bash-completion
|
||||||
|
python-heat
|
||||||
|
python-horizon
|
||||||
|
python-keystone
|
||||||
|
python-lockfile
|
||||||
|
python-novnc
|
||||||
|
python-pam
|
||||||
|
python-passlib
|
||||||
|
python-pytz
|
||||||
|
python-swiftclient
|
||||||
|
python-wsme
|
||||||
|
fm-mgr
|
||||||
|
snmp-ext
|
||||||
|
sm
|
||||||
|
sm-api
|
||||||
|
sm-client
|
||||||
|
sm-common
|
||||||
|
sm-db
|
||||||
|
sm-tools
|
||||||
|
storageconfig
|
||||||
|
storage-topology
|
||||||
|
task-cloud-controller
|
||||||
|
tgt
|
||||||
|
nfv-plugins
|
||||||
|
nfv-vim
|
||||||
|
vm-topology
|
||||||
|
remote-clients
|
||||||
|
lighttpd-fastcgi
|
||||||
|
lighttpd-mod_geoip
|
||||||
|
lighttpd-mod_mysql_vhost
|
||||||
|
openstack-aodh-api
|
||||||
|
openstack-aodh-commmon
|
||||||
|
openstack-aodh-compat
|
||||||
|
openstack-aodh-evaluator
|
||||||
|
openstack-aodh-expirer
|
||||||
|
openstack-aodh-listener
|
||||||
|
openstack-aodh-notifier
|
||||||
|
openstack-cinder
|
||||||
|
openstack-cinder-doc
|
||||||
|
openstack-dashboard
|
||||||
|
openstack-glance
|
||||||
|
openstack-glance-doc
|
||||||
|
openstack-heat-api
|
||||||
|
openstack-heat-api-cfn
|
||||||
|
openstack-heat-api-cloudwatch
|
||||||
|
openstack-heat-common
|
||||||
|
openstack-heat-engine
|
||||||
|
openstack-ironic-api
|
||||||
|
openstack-ironic-common
|
||||||
|
openstack-ironic-conductor
|
||||||
|
python-ironic-tests
|
||||||
|
python-ironic-inspector-client
|
||||||
|
python-ironic-lib
|
||||||
|
python2-ironicclient
|
||||||
|
openstack-keystone
|
||||||
|
openstack-keystone-doc
|
||||||
|
openstack-murano-api
|
||||||
|
openstack-murano-cf-api
|
||||||
|
openstack-murano-common
|
||||||
|
openstack-murano-doc
|
||||||
|
openstack-murano-engine
|
||||||
|
openstack-murano-ui
|
||||||
|
openstack-murano-ui-doc
|
||||||
|
python2-muranoclient
|
||||||
|
python-muranoclient-doc
|
||||||
|
openstack-magnum-api
|
||||||
|
openstack-magnum-common
|
||||||
|
openstack-magnum-conductor
|
||||||
|
openstack-magnum-doc
|
||||||
|
openstack-magnum-ui
|
||||||
|
python2-magnumclient
|
||||||
|
python-magnum
|
||||||
|
python-magnumclient-doc
|
||||||
|
python-magnumclient-tests
|
||||||
|
python-magnum-tests
|
||||||
|
python-magnum-ui-doc
|
||||||
|
openstack-neutron-common
|
||||||
|
openstack-neutron-ml2
|
||||||
|
openstack-nova-api
|
||||||
|
openstack-nova-cells
|
||||||
|
openstack-nova-conductor
|
||||||
|
openstack-nova-console
|
||||||
|
openstack-nova-doc
|
||||||
|
openstack-nova-network
|
||||||
|
openstack-nova-novncproxy
|
||||||
|
openstack-nova-objectstore
|
||||||
|
openstack-nova-scheduler
|
||||||
|
openstack-nova-serialproxy
|
||||||
|
openstack-nova-spicehtml5proxy
|
||||||
|
openstack-nova-placement-api
|
||||||
|
openstack-panko-api
|
||||||
|
openstack-panko-common
|
||||||
|
openstack-panko-doc
|
||||||
|
python-aodh
|
||||||
|
python-aodhclient
|
||||||
|
python-ceilometerclient-doc
|
||||||
|
python-cinder
|
||||||
|
python-cinderclient-doc
|
||||||
|
python-glance
|
||||||
|
python-heatclient
|
||||||
|
python-keystone
|
||||||
|
python-novaclient-doc
|
||||||
|
python-panko
|
||||||
|
python2-pankoclient
|
||||||
|
configutilities
|
||||||
|
drbd-bash-completion
|
||||||
|
drbd-udev
|
||||||
|
drbd-utils
|
||||||
|
drbd-heartbeat
|
||||||
|
drbd-pacemaker
|
||||||
|
drbd
|
||||||
|
kmod-drbd
|
||||||
|
python-networking-odl
|
||||||
|
tis-extensions-controller
|
||||||
|
wrs-heat-templates
|
||||||
|
python-django-horizon
|
||||||
|
kernel-rt
|
||||||
|
kernel-module-igb-uio-rt
|
||||||
|
kernel-rt-kvm
|
||||||
|
kmod-e1000e-rt
|
||||||
|
kmod-i40e-rt
|
||||||
|
kmod-ixgbe-rt
|
||||||
|
kmod-tpm-rt
|
||||||
|
kmod-integrity-rt
|
||||||
|
mlnx-ofa_kernel-rt-modules
|
||||||
|
rtctl
|
||||||
|
rt-setup
|
||||||
|
qat17-rt
|
||||||
|
kernel-rt-tools
|
||||||
|
kernel-rt-tools-libs
|
||||||
|
NaviCLI-Linux-64-x86-en_US
|
||||||
|
kmod-drbd-rt
|
||||||
|
snmp-audittrail
|
||||||
|
wrs-ssl
|
||||||
|
tpm2-tools
|
||||||
|
tss2
|
||||||
|
tpm2-openssl-engine
|
||||||
|
python2-networking-bgpvpn
|
||||||
|
python-networking-bgpvpn-dashboard
|
||||||
|
python-networking-bgpvpn-heat
|
||||||
|
python2-neutron-dynamic-routing
|
||||||
|
python2-ryu
|
||||||
|
python-ryu-common
|
||||||
|
platform-kickstarts
|
||||||
|
python-3parclient
|
||||||
|
python-lefthandclient
|
265
bsp-files/filter_out_from_compute_lowlatency
Normal file
265
bsp-files/filter_out_from_compute_lowlatency
Normal file
@ -0,0 +1,265 @@
|
|||||||
|
ceilometer-api
|
||||||
|
ceilometer-alarm-evaluator
|
||||||
|
ceilometer-alarm-notifier
|
||||||
|
ceilometer-collector
|
||||||
|
ceilometer-tests
|
||||||
|
ceph-manager
|
||||||
|
cgcs-dpdk
|
||||||
|
cgcs-dpdk-dev
|
||||||
|
cgcs-dpdk-staticdev
|
||||||
|
cgcs-dpdk-apps
|
||||||
|
cgts-client
|
||||||
|
cgts-client-bash-completion
|
||||||
|
cgcs-patch-controller
|
||||||
|
cgts-mtce-control
|
||||||
|
cgts-mtce-storage
|
||||||
|
cgts-mtce-common-guestAgent
|
||||||
|
cgtssys
|
||||||
|
cinder
|
||||||
|
cinder-api
|
||||||
|
cinder-scheduler
|
||||||
|
cinder-tests
|
||||||
|
cinder-volume
|
||||||
|
computeconfig-subfunction
|
||||||
|
configvalidator
|
||||||
|
controllerconfig
|
||||||
|
corosync
|
||||||
|
createrepo
|
||||||
|
d2to1
|
||||||
|
distributedcloud-dcmanager
|
||||||
|
distributedcloud-client-dcmanagerclient
|
||||||
|
distributedcloud-dcorch
|
||||||
|
drbd-tools
|
||||||
|
fm-doc
|
||||||
|
glance
|
||||||
|
glance-api
|
||||||
|
glance-registry
|
||||||
|
glance-tests
|
||||||
|
horizon
|
||||||
|
horizon-standalone
|
||||||
|
horizon-tests
|
||||||
|
heat-api-cfn
|
||||||
|
heat-api
|
||||||
|
heat-cfn
|
||||||
|
heat-common
|
||||||
|
heat-contrib-nova-flavor
|
||||||
|
heat-engine
|
||||||
|
heat-templates
|
||||||
|
heat-tests
|
||||||
|
io-monitor
|
||||||
|
isomd5sum
|
||||||
|
kernel-module-openvswitch
|
||||||
|
keystone
|
||||||
|
keystone-tests
|
||||||
|
ldapscripts
|
||||||
|
libconfig-general-perl
|
||||||
|
libssh2
|
||||||
|
lighttpd-module-access
|
||||||
|
lighttpd-module-accesslog
|
||||||
|
lighttpd-module-dirlisting
|
||||||
|
lighttpd-module-indexfile
|
||||||
|
lighttpd-module-proxy
|
||||||
|
lighttpd-module-staticfile
|
||||||
|
lighttpd
|
||||||
|
nodejs
|
||||||
|
nova-api
|
||||||
|
nova-conductor
|
||||||
|
nova-consoleauth
|
||||||
|
nova-controller
|
||||||
|
nova-network
|
||||||
|
nova-novncproxy
|
||||||
|
nova-scheduler
|
||||||
|
nova-spicehtml5proxy
|
||||||
|
nova-tests
|
||||||
|
nova-api-proxy
|
||||||
|
nova-placement-api
|
||||||
|
novnc
|
||||||
|
net-snmp
|
||||||
|
neutron-plugin-ml2
|
||||||
|
neutron-server
|
||||||
|
neutron-tests
|
||||||
|
openldap-backend-bdb
|
||||||
|
openldap-backend-dnssrv
|
||||||
|
openldap-backend-hdb
|
||||||
|
openldap-backend-ldap
|
||||||
|
openldap-backend-mdb
|
||||||
|
openldap-backend-meta
|
||||||
|
openldap-backend-monitor
|
||||||
|
openldap-backend-null
|
||||||
|
openldap-backend-passwd
|
||||||
|
openldap-backend-shell
|
||||||
|
openldap-backends
|
||||||
|
openldap-dbg
|
||||||
|
openldap-doc
|
||||||
|
openldap-overlay-proxycache
|
||||||
|
openldap-overlay-syncprov
|
||||||
|
openldap-servers
|
||||||
|
openldap-slapd
|
||||||
|
openstack-ras
|
||||||
|
pacemaker
|
||||||
|
pacemaker-cli
|
||||||
|
pacemaker-cluster-libs
|
||||||
|
pacemaker-libs
|
||||||
|
patch-alarm
|
||||||
|
patching-controller
|
||||||
|
pbr
|
||||||
|
pecan
|
||||||
|
postgresql-client
|
||||||
|
postgresql-contrib
|
||||||
|
postgresql-timezone
|
||||||
|
postgresql
|
||||||
|
pxe-network-installer
|
||||||
|
python-cephclient
|
||||||
|
python-cinder
|
||||||
|
python-django
|
||||||
|
python-django-appconf
|
||||||
|
python-django-compressor
|
||||||
|
python-django-openstack-auth
|
||||||
|
python-glance
|
||||||
|
python2-gunicorn
|
||||||
|
python-heatclient
|
||||||
|
python-heatclient-bash-completion
|
||||||
|
python-heat
|
||||||
|
python-horizon
|
||||||
|
python-keystone
|
||||||
|
python-lockfile
|
||||||
|
python-novnc
|
||||||
|
python-pam
|
||||||
|
python-passlib
|
||||||
|
python-pytz
|
||||||
|
python-swiftclient
|
||||||
|
python-wsme
|
||||||
|
fm-mgr
|
||||||
|
snmp-ext
|
||||||
|
sm
|
||||||
|
sm-api
|
||||||
|
sm-client
|
||||||
|
sm-common
|
||||||
|
sm-db
|
||||||
|
sm-tools
|
||||||
|
storageconfig
|
||||||
|
storage-topology
|
||||||
|
task-cloud-controller
|
||||||
|
tgt
|
||||||
|
nfv-plugins
|
||||||
|
nfv-vim
|
||||||
|
vm-topology
|
||||||
|
remote-clients
|
||||||
|
lighttpd-fastcgi
|
||||||
|
lighttpd-mod_geoip
|
||||||
|
lighttpd-mod_mysql_vhost
|
||||||
|
openstack-aodh-api
|
||||||
|
openstack-aodh-commmon
|
||||||
|
openstack-aodh-compat
|
||||||
|
openstack-aodh-evaluator
|
||||||
|
openstack-aodh-expirer
|
||||||
|
openstack-aodh-listener
|
||||||
|
openstack-aodh-notifier
|
||||||
|
openstack-cinder
|
||||||
|
openstack-cinder-doc
|
||||||
|
openstack-dashboard
|
||||||
|
openstack-glance
|
||||||
|
openstack-glance-doc
|
||||||
|
openstack-heat-api
|
||||||
|
openstack-heat-api-cfn
|
||||||
|
openstack-heat-api-cloudwatch
|
||||||
|
openstack-heat-common
|
||||||
|
openstack-heat-engine
|
||||||
|
openstack-ironic-api
|
||||||
|
openstack-ironic-common
|
||||||
|
openstack-ironic-conductor
|
||||||
|
python-ironic-tests
|
||||||
|
python-ironic-inspector-client
|
||||||
|
python-ironic-lib
|
||||||
|
python2-ironicclient
|
||||||
|
openstack-keystone
|
||||||
|
openstack-keystone-doc
|
||||||
|
openstack-murano-api
|
||||||
|
openstack-murano-cf-api
|
||||||
|
openstack-murano-common
|
||||||
|
openstack-murano-doc
|
||||||
|
openstack-murano-engine
|
||||||
|
openstack-murano-ui
|
||||||
|
openstack-murano-ui-doc
|
||||||
|
python2-muranoclient
|
||||||
|
python-muranoclient-doc
|
||||||
|
openstack-magnum-api
|
||||||
|
openstack-magnum-common
|
||||||
|
openstack-magnum-conductor
|
||||||
|
openstack-magnum-doc
|
||||||
|
openstack-magnum-ui
|
||||||
|
python2-magnumclient
|
||||||
|
python-magnum
|
||||||
|
python-magnumclient-doc
|
||||||
|
python-magnumclient-tests
|
||||||
|
python-magnum-tests
|
||||||
|
python-magnum-ui-doc
|
||||||
|
openstack-neutron-common
|
||||||
|
openstack-neutron-plugin-ml2
|
||||||
|
openstack-neutron-server
|
||||||
|
openstack-nova-api
|
||||||
|
openstack-nova-cells
|
||||||
|
openstack-nova-conductor
|
||||||
|
openstack-nova-console
|
||||||
|
openstack-nova-doc
|
||||||
|
openstack-nova-network
|
||||||
|
openstack-nova-novncproxy
|
||||||
|
openstack-nova-objectstore
|
||||||
|
openstack-nova-scheduler
|
||||||
|
openstack-nova-serialproxy
|
||||||
|
openstack-nova-spicehtml5proxy
|
||||||
|
openstack-nova-placement-api
|
||||||
|
openstack-panko-api
|
||||||
|
openstack-panko-common
|
||||||
|
openstack-panko-doc
|
||||||
|
python-aodh
|
||||||
|
python-aodhclient
|
||||||
|
python-ceilometerclient-doc
|
||||||
|
python-cinder
|
||||||
|
python-cinderclient-doc
|
||||||
|
python-glance
|
||||||
|
python-heatclient
|
||||||
|
python-keystone
|
||||||
|
python-novaclient-doc
|
||||||
|
python-panko
|
||||||
|
python2-pankoclient
|
||||||
|
configutilities
|
||||||
|
drbd-bash-completion
|
||||||
|
drbd-udev
|
||||||
|
drbd-utils
|
||||||
|
drbd-heartbeat
|
||||||
|
drbd-pacemaker
|
||||||
|
drbd
|
||||||
|
kmod-drbd
|
||||||
|
python-networking-odl
|
||||||
|
tis-extensions-controller
|
||||||
|
wrs-heat-templates
|
||||||
|
python-django-horizon
|
||||||
|
kernel
|
||||||
|
kernel-module-igb-uio
|
||||||
|
kmod-e1000e
|
||||||
|
kmod-i40e
|
||||||
|
kmod-i40evf
|
||||||
|
kmod-ixgbe
|
||||||
|
kmod-ixgbevf
|
||||||
|
kmod-tpm
|
||||||
|
kmod-integrity
|
||||||
|
mlnx-ofa_kernel-modules
|
||||||
|
qat17
|
||||||
|
kernel-tools
|
||||||
|
kernel-tools-libs
|
||||||
|
NaviCLI-Linux-64-x86-en_US
|
||||||
|
kmod-drbd-rt
|
||||||
|
snmp-audittrail
|
||||||
|
wrs-ssl
|
||||||
|
tpm2-tools
|
||||||
|
tss2
|
||||||
|
python2-networking-bgpvpn
|
||||||
|
python-networking-bgpvpn-dashboard
|
||||||
|
python-networking-bgpvpn-heat
|
||||||
|
python2-neutron-dynamic-routing
|
||||||
|
python2-ryu
|
||||||
|
python-ryu-common
|
||||||
|
platform-kickstarts
|
||||||
|
python-3parclient
|
||||||
|
python-lefthandclient
|
52
bsp-files/filter_out_from_controller
Normal file
52
bsp-files/filter_out_from_controller
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
task-cloud-compute
|
||||||
|
compute-huge
|
||||||
|
computeconfig
|
||||||
|
computeconfig-standalone
|
||||||
|
computeconfig-subfunction
|
||||||
|
guest-scale-helper
|
||||||
|
heartbeat
|
||||||
|
storageconfig
|
||||||
|
kernel-module-openvswitch
|
||||||
|
openstack-neutron-sriov-nic-agent
|
||||||
|
platform-util-noncontroller
|
||||||
|
ceilometer-compute
|
||||||
|
openstack-ceilometer-compute
|
||||||
|
cgcs-dpdk
|
||||||
|
cgcs-dpdk-rt
|
||||||
|
cgcs-dpdk-dev
|
||||||
|
cgcs-dpdk-rt-dev
|
||||||
|
cgcs-dpdk-staticdev
|
||||||
|
cgcs-dpdk-rt-staticdev
|
||||||
|
cgcs-dpdk-rt-apps
|
||||||
|
cgts-mtce-compute
|
||||||
|
cgts-mtce-storage
|
||||||
|
cgts-mtce-common-guestServer
|
||||||
|
host-guest-comm
|
||||||
|
host-guest-comm-dev
|
||||||
|
nfscheck
|
||||||
|
radvd
|
||||||
|
remote-clients
|
||||||
|
config-gate-compute
|
||||||
|
kernel-rt
|
||||||
|
kernel-module-igb-uio
|
||||||
|
kernel-module-igb-uio-rt
|
||||||
|
kernel-rt-kvm
|
||||||
|
kmod-e1000e-rt
|
||||||
|
kmod-i40e-rt
|
||||||
|
kmod-ixgbe-rt
|
||||||
|
kmod-tpm-rt
|
||||||
|
kmod-integrity-rt
|
||||||
|
mlnx-ofa_kernel-rt-modules
|
||||||
|
rtctl
|
||||||
|
rt-setup
|
||||||
|
qat17-rt
|
||||||
|
kernel-rt-tools
|
||||||
|
kernel-rt-tools-libs
|
||||||
|
kmod-drbd-rt
|
||||||
|
libtpms
|
||||||
|
swtpm
|
||||||
|
swtpm-tools
|
||||||
|
swtpm-cuse
|
||||||
|
swtpm-libs
|
||||||
|
OVMF
|
||||||
|
openvswitch
|
24
bsp-files/filter_out_from_smallsystem
Normal file
24
bsp-files/filter_out_from_smallsystem
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
cgcs-dpdk-rt
|
||||||
|
cgcs-dpdk-rt-apps
|
||||||
|
cgts-mtce-storage
|
||||||
|
computeconfig-standalone
|
||||||
|
kernel-module-openvswitch
|
||||||
|
platform-util-noncontroller
|
||||||
|
storageconfig
|
||||||
|
nfscheck
|
||||||
|
remote-clients
|
||||||
|
kernel-rt
|
||||||
|
kernel-module-igb-uio-rt
|
||||||
|
kernel-rt-kvm
|
||||||
|
kmod-e1000e-rt
|
||||||
|
kmod-i40e-rt
|
||||||
|
kmod-ixgbe-rt
|
||||||
|
kmod-tpm-rt
|
||||||
|
kmod-integrity-rt
|
||||||
|
mlnx-ofa_kernel-rt-modules
|
||||||
|
rtctl
|
||||||
|
rt-setup
|
||||||
|
qat17-rt
|
||||||
|
kernel-rt-tools
|
||||||
|
kernel-rt-tools-libs
|
||||||
|
kmod-drbd-rt
|
23
bsp-files/filter_out_from_smallsystem_lowlatency
Normal file
23
bsp-files/filter_out_from_smallsystem_lowlatency
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
cgcs-dpdk
|
||||||
|
cgcs-dpdk-apps
|
||||||
|
cgts-mtce-storage
|
||||||
|
computeconfig-standalone
|
||||||
|
kernel-module-openvswitch
|
||||||
|
platform-util-noncontroller
|
||||||
|
storageconfig
|
||||||
|
nfscheck
|
||||||
|
remote-clients
|
||||||
|
kernel
|
||||||
|
kernel-module-igb-uio
|
||||||
|
kmod-e1000e
|
||||||
|
kmod-i40e
|
||||||
|
kmod-i40evf
|
||||||
|
kmod-ixgbe
|
||||||
|
kmod-ixgbevf
|
||||||
|
kmod-tpm
|
||||||
|
kmod-integrity
|
||||||
|
mlnx-ofa_kernel-modules
|
||||||
|
qat17
|
||||||
|
kernel-tools
|
||||||
|
kernel-tools-libs
|
||||||
|
kmod-drbd
|
303
bsp-files/filter_out_from_storage
Normal file
303
bsp-files/filter_out_from_storage
Normal file
@ -0,0 +1,303 @@
|
|||||||
|
ceilometer-alarm-evaluator
|
||||||
|
ceilometer-alarm-notifier
|
||||||
|
ceilometer-api
|
||||||
|
ceilometer-collector
|
||||||
|
ceilometer-compute
|
||||||
|
ceilometer-tests
|
||||||
|
ceph-manager
|
||||||
|
cgcs-dpdk
|
||||||
|
cgcs-dpdk-rt
|
||||||
|
cgcs-dpdk-dev
|
||||||
|
cgcs-dpdk-rt-dev
|
||||||
|
cgcs-dpdk-staticdev
|
||||||
|
cgcs-dpdk-rt-staticdev
|
||||||
|
cgcs-dpdk-rt-apps
|
||||||
|
cgts-client
|
||||||
|
cgts-client-bash-completion
|
||||||
|
cgcs-patch-controller
|
||||||
|
cgts-mtce-compute
|
||||||
|
cgts-mtce-control
|
||||||
|
cgts-mtce-common-guestServer
|
||||||
|
cgts-mtce-common-guestAgent
|
||||||
|
cgtssys
|
||||||
|
cinder
|
||||||
|
cinder-api
|
||||||
|
cinder-scheduler
|
||||||
|
cinder-tests
|
||||||
|
cinder-volume
|
||||||
|
compute-huge
|
||||||
|
computeconfig
|
||||||
|
computeconfig-standalone
|
||||||
|
computeconfig-subfunction
|
||||||
|
configvalidator
|
||||||
|
controllerconfig
|
||||||
|
createrepo
|
||||||
|
d2to1
|
||||||
|
distributedcloud-dcmanager
|
||||||
|
distributedcloud-client-dcmanagerclient
|
||||||
|
distributedcloud-dcorch
|
||||||
|
erlang
|
||||||
|
fm-doc
|
||||||
|
glance
|
||||||
|
glance-api
|
||||||
|
glance-registry
|
||||||
|
glance-tests
|
||||||
|
glusterfs
|
||||||
|
glusterfs-api
|
||||||
|
glusterfs-client-xlators
|
||||||
|
glusterfs-libs
|
||||||
|
guest-scale-helper
|
||||||
|
haproxy
|
||||||
|
heartbeat
|
||||||
|
heat-api
|
||||||
|
heat-api-cfn
|
||||||
|
heat-cfn
|
||||||
|
heat-common
|
||||||
|
heat-contrib-nova-flavor
|
||||||
|
heat-engine
|
||||||
|
heat-templates
|
||||||
|
heat-tests
|
||||||
|
horizon
|
||||||
|
horizon-standalone
|
||||||
|
horizon-tests
|
||||||
|
host-guest-comm
|
||||||
|
io-monitor
|
||||||
|
io-scheduler
|
||||||
|
isomd5sum
|
||||||
|
ipxe-roms-qemu
|
||||||
|
kernel-module-openvswitch
|
||||||
|
keystone
|
||||||
|
keystone-tests
|
||||||
|
libconfig-general-perl
|
||||||
|
libguestfs
|
||||||
|
libssh2
|
||||||
|
lighttpd-module-access
|
||||||
|
lighttpd-module-accesslog
|
||||||
|
lighttpd-module-dirlisting
|
||||||
|
lighttpd-module-indexfile
|
||||||
|
lighttpd-module-proxy
|
||||||
|
lighttpd-module-staticfile
|
||||||
|
lighttpd
|
||||||
|
lighttpd-mod_geoip
|
||||||
|
lighttpd-fastcgi
|
||||||
|
lighttpd-mod_mysql_vhost
|
||||||
|
libvirt
|
||||||
|
libvirt-daemon
|
||||||
|
libvirt-daemon-config-network
|
||||||
|
libvirt-daemon-config-nwfilter
|
||||||
|
libvirt-daemon-driver-interface
|
||||||
|
libvirt-daemon-driver-lxc
|
||||||
|
libvirt-daemon-driver-network
|
||||||
|
libvirt-daemon-driver-nodedev
|
||||||
|
libvirt-daemon-driver-nwfilter
|
||||||
|
libvirt-daemon-driver-qemu
|
||||||
|
libvirt-daemon-driver-qemu
|
||||||
|
libvirt-daemon-driver-secret
|
||||||
|
libvirt-daemon-driver-storage
|
||||||
|
libvirt-daemon-kvm
|
||||||
|
libvirt-docs
|
||||||
|
nodejs
|
||||||
|
nova-api
|
||||||
|
nova-common
|
||||||
|
nova-compute
|
||||||
|
nova-compute-preclean
|
||||||
|
nova-compute-setup
|
||||||
|
nova-conductor
|
||||||
|
nova-consoleauth
|
||||||
|
nova-controller
|
||||||
|
nova-network
|
||||||
|
nova-novncproxy
|
||||||
|
nova-scheduler
|
||||||
|
nova-spicehtml5proxy
|
||||||
|
nova-tests
|
||||||
|
nova-api-proxy
|
||||||
|
nova-placement-api
|
||||||
|
novnc
|
||||||
|
net-snmp
|
||||||
|
openstack-aodh-api
|
||||||
|
openstack-aodh-commmon
|
||||||
|
openstack-aodh-compat
|
||||||
|
openstack-aodh-evaluator
|
||||||
|
openstack-aodh-expirer
|
||||||
|
openstack-aodh-listener
|
||||||
|
openstack-aodh-notifier
|
||||||
|
openstack-ceilometer-alarm
|
||||||
|
openstack-ceilometer-central
|
||||||
|
openstack-ceilometer-collector
|
||||||
|
openstack-ceilometer-compute
|
||||||
|
openstack-ceilometer-ipmi
|
||||||
|
openstack-ceilometer-notification
|
||||||
|
openstack-cinder
|
||||||
|
openstack-cinder-doc
|
||||||
|
openstack-dashboard
|
||||||
|
openstack-glance
|
||||||
|
openstack-glance-doc
|
||||||
|
openstack-heat-api
|
||||||
|
openstack-heat-api-cfn
|
||||||
|
openstack-heat-api-cloudwatch
|
||||||
|
openstack-heat-common
|
||||||
|
openstack-heat-engine
|
||||||
|
openstack-ironic-api
|
||||||
|
openstack-ironic-common
|
||||||
|
openstack-ironic-conductor
|
||||||
|
python-ironic-tests
|
||||||
|
python-ironic-inspector-client
|
||||||
|
python-ironic-lib
|
||||||
|
python2-ironicclient
|
||||||
|
openstack-keystone
|
||||||
|
openstack-keystone-doc
|
||||||
|
openstack-murano-api
|
||||||
|
openstack-murano-cf-api
|
||||||
|
openstack-murano-common
|
||||||
|
openstack-murano-doc
|
||||||
|
openstack-murano-engine
|
||||||
|
openstack-murano-ui
|
||||||
|
openstack-murano-ui-doc
|
||||||
|
python2-muranoclient
|
||||||
|
python-muranoclient-doc
|
||||||
|
openstack-magnum-api
|
||||||
|
openstack-magnum-common
|
||||||
|
openstack-magnum-conductor
|
||||||
|
openstack-magnum-doc
|
||||||
|
openstack-magnum-ui
|
||||||
|
python2-magnumclient
|
||||||
|
python-magnum
|
||||||
|
python-magnumclient-doc
|
||||||
|
python-magnumclient-tests
|
||||||
|
python-magnum-tests
|
||||||
|
python-magnum-ui-doc
|
||||||
|
openstack-neutron
|
||||||
|
openstack-neutron-common
|
||||||
|
openstack-neutron-sriov-nic-agent
|
||||||
|
openstack-neutron-ml2
|
||||||
|
openstack-nova-api
|
||||||
|
openstack-nova-cells
|
||||||
|
openstack-nova-common
|
||||||
|
openstack-nova-compute
|
||||||
|
openstack-nova-conductor
|
||||||
|
openstack-nova-console
|
||||||
|
openstack-nova-doc
|
||||||
|
openstack-nova-network
|
||||||
|
openstack-nova-novncproxy
|
||||||
|
openstack-nova-objectstore
|
||||||
|
openstack-nova-scheduler
|
||||||
|
openstack-nova-serialproxy
|
||||||
|
openstack-nova-spicehtml5proxy
|
||||||
|
openstack-nova-placement-api
|
||||||
|
openstack-panko-api
|
||||||
|
openstack-panko-common
|
||||||
|
openstack-panko-doc
|
||||||
|
openstack-ras
|
||||||
|
patch-alarm
|
||||||
|
patching-controller
|
||||||
|
pbr
|
||||||
|
pecan
|
||||||
|
postgresql
|
||||||
|
postgresql-client
|
||||||
|
postgresql-contrib
|
||||||
|
postgresql-timezone
|
||||||
|
pxe-network-installer
|
||||||
|
python-aodh
|
||||||
|
python-aodhclient
|
||||||
|
python-ceilometerclient
|
||||||
|
python-cephclient
|
||||||
|
python-cinder
|
||||||
|
python-cinderclient
|
||||||
|
python-django
|
||||||
|
python-django-appconf
|
||||||
|
python-django-compressor
|
||||||
|
python-django-openstack-auth
|
||||||
|
python-glance
|
||||||
|
python-glanceclient
|
||||||
|
python2-gunicorn
|
||||||
|
python-heat
|
||||||
|
python-heatclient
|
||||||
|
python-heatclient-bash-completion
|
||||||
|
python-horizon
|
||||||
|
python-keystone
|
||||||
|
python-libguestfs
|
||||||
|
python-lockfile
|
||||||
|
python-netclient
|
||||||
|
python-neutron
|
||||||
|
python-neutron-lib
|
||||||
|
python2-neutronclient
|
||||||
|
python-nova
|
||||||
|
python2-novaclient
|
||||||
|
python-novnc
|
||||||
|
python-openstackclient
|
||||||
|
python-pam
|
||||||
|
python-panko
|
||||||
|
python2-pankoclient
|
||||||
|
python-passlib
|
||||||
|
python-pytz
|
||||||
|
python-swiftclient
|
||||||
|
python-wsme
|
||||||
|
qemu-img-ev
|
||||||
|
qemu-kvm-common-ev
|
||||||
|
qemu-kvm-ev
|
||||||
|
qemu-kvm-tools-ev
|
||||||
|
radvd
|
||||||
|
rubygem-rdoc
|
||||||
|
snmp-ext
|
||||||
|
task-cloud-compute
|
||||||
|
task-cloud-controller
|
||||||
|
tgt
|
||||||
|
fm-mgr
|
||||||
|
sm
|
||||||
|
sm-api
|
||||||
|
sm-client
|
||||||
|
sm-common
|
||||||
|
sm-db
|
||||||
|
sm-tools
|
||||||
|
storage-topology
|
||||||
|
nfv-common
|
||||||
|
nfv-plugins
|
||||||
|
nfv-vim
|
||||||
|
nfv-tools
|
||||||
|
vm-topology
|
||||||
|
remote-clients
|
||||||
|
python-networking-odl
|
||||||
|
config-gate-compute
|
||||||
|
tis-extensions-controller
|
||||||
|
wrs-heat-templates
|
||||||
|
python-django-horizon
|
||||||
|
libmlx5
|
||||||
|
kernel-rt
|
||||||
|
kernel-module-igb-uio
|
||||||
|
kernel-module-igb-uio-rt
|
||||||
|
kernel-rt-kvm
|
||||||
|
kmod-e1000e-rt
|
||||||
|
kmod-i40e-rt
|
||||||
|
kmod-ixgbe-rt
|
||||||
|
kmod-tpm-rt
|
||||||
|
kmod-integrity-rt
|
||||||
|
mlnx-ofa_kernel-rt-modules
|
||||||
|
rtctl
|
||||||
|
rt-setup
|
||||||
|
qat17-rt
|
||||||
|
kernel-rt-tools
|
||||||
|
kernel-rt-tools-libs
|
||||||
|
NaviCLI-Linux-64-x86-en_US
|
||||||
|
kmod-drbd-rt
|
||||||
|
snmp-audittrail
|
||||||
|
wrs-ssl
|
||||||
|
tpm2-tools
|
||||||
|
tss2
|
||||||
|
tpm2-openssl-engine
|
||||||
|
libtpms
|
||||||
|
swtpm
|
||||||
|
swtpm-tools
|
||||||
|
swtpm-cuse
|
||||||
|
swtpm-libs
|
||||||
|
OVMF
|
||||||
|
python2-networking-bgpvpn
|
||||||
|
python-networking-bgpvpn-dashboard
|
||||||
|
python-networking-bgpvpn-heat
|
||||||
|
python2-neutron-dynamic-routing
|
||||||
|
python2-ryu
|
||||||
|
python-ryu-common
|
||||||
|
python2-networking-sfc
|
||||||
|
openvswitch
|
||||||
|
platform-kickstarts
|
||||||
|
python-3parclient
|
||||||
|
python-lefthandclient
|
155
bsp-files/grub.cfg
Normal file
155
bsp-files/grub.cfg
Normal file
@ -0,0 +1,155 @@
|
|||||||
|
default=2
|
||||||
|
timeout=-1
|
||||||
|
|
||||||
|
search --no-floppy --set=root -l 'oe_iso_boot'
|
||||||
|
|
||||||
|
# ---------------------- NOTE ----------------------
|
||||||
|
# If you are updating menus, make sure that controllerconfig/clone.py
|
||||||
|
# is in sync with your changes (only serial console ids).
|
||||||
|
# STANDARD_STANDARD = 'standard>serial>' +
|
||||||
|
# sysinv_constants.SYSTEM_SECURITY_PROFILE_STANDARD
|
||||||
|
# STANDARD_EXTENDED = 'standard>serial>' +
|
||||||
|
# sysinv_constants.SYSTEM_SECURITY_PROFILE_EXTENDED
|
||||||
|
# AIO_STANDARD = 'standard>aio>' +
|
||||||
|
# sysinv_constants.SYSTEM_SECURITY_PROFILE_STANDARD
|
||||||
|
# AIO_EXTENDED = 'standard>aio>' +
|
||||||
|
# sysinv_constants.SYSTEM_SECURITY_PROFILE_EXTENDED
|
||||||
|
# AIO_LL_STANDARD = 'standard>aio-lowlat>' +
|
||||||
|
# sysinv_constants.SYSTEM_SECURITY_PROFILE_STANDARD
|
||||||
|
# AIO_LL_EXTENDED = 'standard>aio-lowlat>' +
|
||||||
|
# sysinv_constants.SYSTEM_SECURITY_PROFILE_EXTENDED
|
||||||
|
# SUBMENUITEM_TBOOT = 'tboot'
|
||||||
|
# SUBMENUITEM_SECUREBOOT = 'secureboot'
|
||||||
|
# --------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
# Menu 0
|
||||||
|
menuentry 'Select kernel options and boot kernel' {
|
||||||
|
echo " "
|
||||||
|
}
|
||||||
|
|
||||||
|
# Create a space in the menu
|
||||||
|
menuentry ' ' {
|
||||||
|
echo " "
|
||||||
|
}
|
||||||
|
|
||||||
|
# Standard Controller menu
|
||||||
|
submenu 'UEFI Standard Controller Configuration' --id=standard {
|
||||||
|
submenu 'Serial Console' --id=serial {
|
||||||
|
menuentry 'STANDARD Security Profile' --id=standard {
|
||||||
|
linuxefi /vmlinuz inst.ks=hd:LABEL=oe_iso_boot:/ks.cfg boot_device=sda rootfs_device=sda biosdevname=0 usbcore.autosuspend=-1 console=ttyS0,115200 inst.text serial inst.stage2=hd:LABEL=oe_iso_boot inst.gpt security_profile=standard
|
||||||
|
initrdefi /initrd.img
|
||||||
|
}
|
||||||
|
submenu 'EXTENDED Security Profile' --id=extended {
|
||||||
|
menuentry 'Secure Boot Profile' --id=secureboot {
|
||||||
|
linuxefi /vmlinuz inst.ks=hd:LABEL=oe_iso_boot:/ks.cfg boot_device=sda rootfs_device=sda biosdevname=0 usbcore.autosuspend=-1 console=ttyS0,115200 inst.text serial inst.stage2=hd:LABEL=oe_iso_boot inst.gpt security_profile=extended tboot=false
|
||||||
|
initrdefi /initrd.img
|
||||||
|
}
|
||||||
|
menuentry 'Trusted Boot Profile' --id=tboot {
|
||||||
|
linuxefi /vmlinuz inst.ks=hd:LABEL=oe_iso_boot:/ks.cfg boot_device=sda rootfs_device=sda biosdevname=0 usbcore.autosuspend=-1 console=ttyS0,115200 inst.text serial inst.stage2=hd:LABEL=oe_iso_boot inst.gpt security_profile=extended tboot=true
|
||||||
|
initrdefi /initrd.img
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
submenu 'Graphical Console' --id=graphical {
|
||||||
|
menuentry 'STANDARD Security Profile' --id=standard {
|
||||||
|
linuxefi /vmlinuz inst.ks=hd:LABEL=oe_iso_boot:/ks.cfg boot_device=sda rootfs_device=sda biosdevname=0 usbcore.autosuspend=-1 console=tty0 serial inst.text inst.stage2=hd:LABEL=oe_iso_boot inst.gpt security_profile=standard
|
||||||
|
initrdefi /initrd.img
|
||||||
|
}
|
||||||
|
submenu 'EXTENDED Security Profile' --id=extended {
|
||||||
|
menuentry 'Secure Boot Profile' --id=secureboot {
|
||||||
|
linuxefi /vmlinuz inst.ks=hd:LABEL=oe_iso_boot:/ks.cfg boot_device=sda rootfs_device=sda biosdevname=0 usbcore.autosuspend=-1 console=tty0 serial inst.text inst.stage2=hd:LABEL=oe_iso_boot inst.gpt security_profile=extended tboot=false
|
||||||
|
initrdefi /initrd.img
|
||||||
|
}
|
||||||
|
menuentry 'Trusted Boot Profile' --id=tboot {
|
||||||
|
linuxefi /vmlinuz inst.ks=hd:LABEL=oe_iso_boot:/ks.cfg boot_device=sda rootfs_device=sda biosdevname=0 usbcore.autosuspend=-1 console=tty0 serial inst.text inst.stage2=hd:LABEL=oe_iso_boot inst.gpt security_profile=extended tboot=true
|
||||||
|
initrdefi /initrd.img
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Create a space in the menu
|
||||||
|
menuentry ' '{
|
||||||
|
echo " "
|
||||||
|
}
|
||||||
|
|
||||||
|
# AIO Controller menu
|
||||||
|
submenu 'UEFI All-in-one Controller Configuration' --id=aio {
|
||||||
|
submenu 'Serial Console' --id=serial {
|
||||||
|
menuentry 'STANDARD Security Profile' --id=standard {
|
||||||
|
linuxefi /vmlinuz inst.ks=hd:LABEL=oe_iso_boot:/smallsystem_ks.cfg boot_device=sda rootfs_device=sda biosdevname=0 usbcore.autosuspend=-1 console=ttyS0,115200 inst.text serial inst.stage2=hd:LABEL=oe_iso_boot inst.gpt security_profile=standard
|
||||||
|
initrdefi /initrd.img
|
||||||
|
}
|
||||||
|
submenu 'EXTENDED Security Profile' --id=extended {
|
||||||
|
menuentry 'Secure Boot Profile' --id=secureboot {
|
||||||
|
linuxefi /vmlinuz inst.ks=hd:LABEL=oe_iso_boot:/smallsystem_ks.cfg boot_device=sda rootfs_device=sda biosdevname=0 usbcore.autosuspend=-1 console=ttyS0,115200 inst.text serial inst.stage2=hd:LABEL=oe_iso_boot inst.gpt security_profile=extended tboot=false
|
||||||
|
initrdefi /initrd.img
|
||||||
|
}
|
||||||
|
menuentry 'Trusted Boot Profile' --id=tboot {
|
||||||
|
linuxefi /vmlinuz inst.ks=hd:LABEL=oe_iso_boot:/smallsystem_ks.cfg boot_device=sda rootfs_device=sda biosdevname=0 usbcore.autosuspend=-1 console=ttyS0,115200 inst.text serial inst.stage2=hd:LABEL=oe_iso_boot inst.gpt security_profile=extended tboot=true
|
||||||
|
initrdefi /initrd.img
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
submenu 'Graphical Console' --id=graphical {
|
||||||
|
menuentry 'STANDARD Security Profile' --id=standard {
|
||||||
|
linuxefi /vmlinuz inst.ks=hd:LABEL=oe_iso_boot:/smallsystem_ks.cfg boot_device=sda rootfs_device=sda biosdevname=0 usbcore.autosuspend=-1 console=tty0 inst.text inst.stage2=hd:LABEL=oe_iso_boot inst.gpt security_profile=standard
|
||||||
|
initrdefi /initrd.img
|
||||||
|
}
|
||||||
|
submenu 'EXTENDED Security Profile' --id=extended {
|
||||||
|
menuentry 'Secure Boot Profile' --id=secureboot {
|
||||||
|
linuxefi /vmlinuz inst.ks=hd:LABEL=oe_iso_boot:/smallsystem_ks.cfg boot_device=sda rootfs_device=sda biosdevname=0 usbcore.autosuspend=-1 console=tty0 inst.text inst.stage2=hd:LABEL=oe_iso_boot inst.gpt security_profile=extended tboot=false
|
||||||
|
initrdefi /initrd.img
|
||||||
|
}
|
||||||
|
menuentry 'Trusted Boot Profile' --id=tboot {
|
||||||
|
linuxefi /vmlinuz inst.ks=hd:LABEL=oe_iso_boot:/smallsystem_ks.cfg boot_device=sda rootfs_device=sda biosdevname=0 usbcore.autosuspend=-1 console=tty0 inst.text inst.stage2=hd:LABEL=oe_iso_boot inst.gpt security_profile=extended tboot=true
|
||||||
|
initrdefi /initrd.img
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Create a space in the menu
|
||||||
|
menuentry ' '{
|
||||||
|
echo " "
|
||||||
|
}
|
||||||
|
|
||||||
|
# AIO (lowlatency) Controller menu
|
||||||
|
submenu 'UEFI All-in-one (lowlatency) Controller Configuration' --id=aio-lowlat {
|
||||||
|
submenu 'Serial Console' --id=serial {
|
||||||
|
menuentry 'STANDARD Security Profile' --id=standard {
|
||||||
|
linuxefi /vmlinuz inst.ks=hd:LABEL=oe_iso_boot:/smallsystem_lowlatency_ks.cfg boot_device=sda rootfs_device=sda biosdevname=0 usbcore.autosuspend=-1 console=ttyS0,115200 inst.text serial inst.stage2=hd:LABEL=oe_iso_boot inst.gpt security_profile=standard
|
||||||
|
initrdefi /initrd.img
|
||||||
|
}
|
||||||
|
submenu 'EXTENDED Security Profile' --id=extended {
|
||||||
|
menuentry 'Secure Boot Profile' --id=secureboot {
|
||||||
|
linuxefi /vmlinuz inst.ks=hd:LABEL=oe_iso_boot:/smallsystem_lowlatency_ks.cfg boot_device=sda rootfs_device=sda biosdevname=0 usbcore.autosuspend=-1 console=ttyS0,115200 inst.text serial inst.stage2=hd:LABEL=oe_iso_boot inst.gpt security_profile=extended tboot=false
|
||||||
|
initrdefi /initrd.img
|
||||||
|
}
|
||||||
|
menuentry 'Trusted Boot Profile' --id=tboot {
|
||||||
|
linuxefi /vmlinuz inst.ks=hd:LABEL=oe_iso_boot:/smallsystem_lowlatency_ks.cfg boot_device=sda rootfs_device=sda biosdevname=0 usbcore.autosuspend=-1 console=ttyS0,115200 inst.text serial inst.stage2=hd:LABEL=oe_iso_boot inst.gpt security_profile=extended tboot=true
|
||||||
|
initrdefi /initrd.img
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
submenu 'Graphical Console' --id=graphical {
|
||||||
|
menuentry 'STANDARD Security Profile' --id=standard {
|
||||||
|
linuxefi /vmlinuz inst.ks=hd:LABEL=oe_iso_boot:/smallsystem_lowlatency_ks.cfg boot_device=sda rootfs_device=sda biosdevname=0 usbcore.autosuspend=-1 console=tty0 inst.text inst.stage2=hd:LABEL=oe_iso_boot inst.gpt security_profile=standard
|
||||||
|
initrdefi /initrd.img
|
||||||
|
}
|
||||||
|
submenu 'EXTENDED Security Profile' --id=extended {
|
||||||
|
menuentry 'Secure Boot Profile' --id=secureboot {
|
||||||
|
linuxefi /vmlinuz inst.ks=hd:LABEL=oe_iso_boot:/smallsystem_lowlatency_ks.cfg boot_device=sda rootfs_device=sda biosdevname=0 usbcore.autosuspend=-1 console=tty0 inst.text inst.stage2=hd:LABEL=oe_iso_boot inst.gpt security_profile=extended tboot=false
|
||||||
|
initrdefi /initrd.img
|
||||||
|
}
|
||||||
|
menuentry 'Trusted Boot Profile' --id=tboot {
|
||||||
|
linuxefi /vmlinuz inst.ks=hd:LABEL=oe_iso_boot:/smallsystem_lowlatency_ks.cfg boot_device=sda rootfs_device=sda biosdevname=0 usbcore.autosuspend=-1 console=tty0 inst.text inst.stage2=hd:LABEL=oe_iso_boot inst.gpt security_profile=extended tboot=true
|
||||||
|
initrdefi /initrd.img
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
72
bsp-files/kickstarts/functions.sh
Normal file
72
bsp-files/kickstarts/functions.sh
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
# This file defines functions that can be used in %pre and %post kickstart sections, by including:
|
||||||
|
# . /tmp/ks-functions.sh
|
||||||
|
#
|
||||||
|
|
||||||
|
cat <<END_FUNCTIONS >/tmp/ks-functions.sh
|
||||||
|
#
|
||||||
|
# Copyright (c) xxxYEARxxx Wind River Systems, Inc.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
|
function get_by_path()
|
||||||
|
{
|
||||||
|
local disk=\$(cd /dev ; readlink -f \$1)
|
||||||
|
for p in /dev/disk/by-path/*; do
|
||||||
|
if [ "\$disk" = "\$(readlink -f \$p)" ]; then
|
||||||
|
echo \$p
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_disk()
|
||||||
|
{
|
||||||
|
echo \$(cd /dev ; readlink -f \$1)
|
||||||
|
}
|
||||||
|
|
||||||
|
function report_pre_failure_with_msg()
|
||||||
|
{
|
||||||
|
local msg=\$1
|
||||||
|
echo -e '\n\nInstallation failed.\n'
|
||||||
|
echo "\$msg"
|
||||||
|
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function report_post_failure_with_msg()
|
||||||
|
{
|
||||||
|
local msg=\$1
|
||||||
|
cat <<EOF >> /etc/motd
|
||||||
|
|
||||||
|
Installation failed.
|
||||||
|
\$msg
|
||||||
|
|
||||||
|
EOF
|
||||||
|
echo "\$msg" >/etc/platform/installation_failed
|
||||||
|
|
||||||
|
echo -e '\n\nInstallation failed.\n'
|
||||||
|
echo "\$msg"
|
||||||
|
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function report_post_failure_with_logfile()
|
||||||
|
{
|
||||||
|
local logfile=\$1
|
||||||
|
cat <<EOF >> /etc/motd
|
||||||
|
|
||||||
|
Installation failed.
|
||||||
|
Please see \$logfile for details of failure
|
||||||
|
|
||||||
|
EOF
|
||||||
|
echo \$logfile >/etc/platform/installation_failed
|
||||||
|
|
||||||
|
echo -e '\n\nInstallation failed.\n'
|
||||||
|
cat \$logfile
|
||||||
|
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
END_FUNCTIONS
|
||||||
|
|
41
bsp-files/kickstarts/post_clone_iso_ks.cfg
Normal file
41
bsp-files/kickstarts/post_clone_iso_ks.cfg
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
|
||||||
|
# clone post installation script
|
||||||
|
%post --nochroot
|
||||||
|
if [ -d /mnt/install/source ]; then
|
||||||
|
srcdir=/mnt/install/source
|
||||||
|
else
|
||||||
|
srcdir=/run/install/repo
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -d $srcdir/clone-archive ]; then
|
||||||
|
cp -r $srcdir/clone-archive /mnt/sysimage/
|
||||||
|
cp $srcdir/install_clone /mnt/sysimage/usr/bin/install_clone
|
||||||
|
chmod 500 /mnt/sysimage/usr/bin/install_clone
|
||||||
|
fi
|
||||||
|
%end
|
||||||
|
|
||||||
|
|
||||||
|
# clone post installation script to start install-clone service
|
||||||
|
%post --erroronfail
|
||||||
|
|
||||||
|
# Build install-clone service file here, so that it is patchable.
|
||||||
|
cat << EOF > /usr/lib/systemd/system/install-clone.service
|
||||||
|
[Unit]
|
||||||
|
Description=Titanium install-clone service
|
||||||
|
After=hostw.service
|
||||||
|
Before=serial-getty@ttyS0.service getty@tty1.service
|
||||||
|
[Service]
|
||||||
|
User=root
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=yes
|
||||||
|
Environment=PYTHONUNBUFFERED=1
|
||||||
|
ExecStart=/usr/bin/install_clone
|
||||||
|
StandardOutput=syslog+console
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
systemctl enable install-clone
|
||||||
|
|
||||||
|
%end
|
||||||
|
|
104
bsp-files/kickstarts/post_common.cfg
Normal file
104
bsp-files/kickstarts/post_common.cfg
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
%post --erroronfail
|
||||||
|
|
||||||
|
# Source common functions
|
||||||
|
. /tmp/ks-functions.sh
|
||||||
|
|
||||||
|
# Turn off locale support for i18n if is not installed
|
||||||
|
if [ ! -d /usr/share/i18n ] ; then
|
||||||
|
rm -f /etc/sysconfig/i18n
|
||||||
|
fi
|
||||||
|
# Unset the hostname
|
||||||
|
rm /etc/hostname
|
||||||
|
|
||||||
|
# If using a serial install make sure to add a getty on the tty1
|
||||||
|
conarg=`cat /proc/cmdline |xargs -n1 echo |grep console= |grep ttyS`
|
||||||
|
if [ -n "$conarg" ] ; then
|
||||||
|
echo "1:2345:respawn:/sbin/mingetty tty1" >> /etc/inittab
|
||||||
|
fi
|
||||||
|
|
||||||
|
#### SECURITY PROFILE HANDLING (Post Installation) ####
|
||||||
|
# Check if the Security profile mode is enabled
|
||||||
|
# and load the appropriate kernel modules
|
||||||
|
secprofile=`cat /proc/cmdline |xargs -n1 echo |grep security_profile= | grep extended`
|
||||||
|
if [ -n "$secprofile" ]; then
|
||||||
|
echo "In Extended Security profile mode. Loading IMA kernel module"
|
||||||
|
systemctl enable auditd.service
|
||||||
|
# Add the securityfs mount for the IMA Runtime measurement list
|
||||||
|
echo "securityfs /sys/kernel/security securityfs defaults,nodev 0 0" >> /etc/fstab
|
||||||
|
else
|
||||||
|
# Disable audit daemon in the Standard Security Profile
|
||||||
|
systemctl disable auditd
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# Configure smart package manager channels
|
||||||
|
rm -rf /var/lib/smart
|
||||||
|
mkdir /var/lib/smart
|
||||||
|
/usr/bin/smart channel -y \
|
||||||
|
--add rpmdb type=rpm-sys name="RPM Database"
|
||||||
|
/usr/bin/smart channel -y \
|
||||||
|
--add base type=rpm-md name="Base" baseurl=http://controller/feed/rel-xxxPLATFORM_RELEASExxx
|
||||||
|
/usr/bin/smart channel -y \
|
||||||
|
--add updates type=rpm-md name="Patches" baseurl=http://controller/updates/rel-xxxPLATFORM_RELEASExxx
|
||||||
|
|
||||||
|
# Configure smart to use rpm --nolinktos option
|
||||||
|
/usr/bin/smart config --set rpm-nolinktos=true
|
||||||
|
|
||||||
|
# Configure smart to use rpm --nosignature option
|
||||||
|
/usr/bin/smart config --set rpm-check-signatures=false
|
||||||
|
|
||||||
|
# Delete the CentOS yum repo files
|
||||||
|
rm -f /etc/yum.repos.d/CentOS-*
|
||||||
|
|
||||||
|
# Persist the boot device naming as UDEV rules so that if the network device
|
||||||
|
# order changes post-install that we will still be able to DHCP from the
|
||||||
|
# correct interface to reach the active controller. For most nodes only the
|
||||||
|
# management/boot interface needs to be persisted but because we require both
|
||||||
|
# controllers to be identically configured and controller-0 and controller-1
|
||||||
|
# are installed differently (e.g., controller-0 from USB and controller-1 from
|
||||||
|
# network) it is not possible to know which interface to persist for
|
||||||
|
# controller-0. The simplest solution is to persist all interfaces.
|
||||||
|
#
|
||||||
|
mkdir -p /etc/udev/rules.d
|
||||||
|
echo "# Persisted network interfaces from anaconda installer" > /etc/udev/rules.d/70-persistent-net.rules
|
||||||
|
for dir in /sys/class/net/*; do
|
||||||
|
if [ -e ${dir}/device ]; then
|
||||||
|
dev=$(basename ${dir})
|
||||||
|
mac_address=$(cat /sys/class/net/${dev}/address)
|
||||||
|
echo "ACTION==\"add\", SUBSYSTEM==\"net\", DRIVERS==\"?*\", ATTR{address}==\"${mac_address}\", NAME=\"${dev}\"" >> /etc/udev/rules.d/70-persistent-net.rules
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Mark the wrsroot password as expired immediately
|
||||||
|
chage -d 0 wrsroot
|
||||||
|
|
||||||
|
# Lock the root password
|
||||||
|
passwd -l root
|
||||||
|
|
||||||
|
# Enable tmpfs mount for /tmp
|
||||||
|
# delete /var/tmp so that it can similinked in
|
||||||
|
rm -rf /var/tmp
|
||||||
|
systemctl enable tmp.mount
|
||||||
|
|
||||||
|
# Disable automount of /dev/hugepages
|
||||||
|
systemctl mask dev-hugepages.mount
|
||||||
|
|
||||||
|
# Disable firewall
|
||||||
|
systemctl disable firewalld
|
||||||
|
|
||||||
|
# Disable libvirtd
|
||||||
|
systemctl disable libvirtd.service
|
||||||
|
|
||||||
|
# Enable rsyncd
|
||||||
|
systemctl enable rsyncd.service
|
||||||
|
|
||||||
|
# Allow root to run sudo from a non-tty (for scripts running as root that run sudo cmds)
|
||||||
|
echo 'Defaults:root !requiretty' > /etc/sudoers.d/root
|
||||||
|
|
||||||
|
# Make fstab just root read/writable
|
||||||
|
chmod 600 /etc/fstab
|
||||||
|
|
||||||
|
# Create first_boot flag
|
||||||
|
touch /etc/platform/.first_boot
|
||||||
|
|
||||||
|
%end
|
98
bsp-files/kickstarts/post_kernel_aio_and_compute.cfg
Normal file
98
bsp-files/kickstarts/post_kernel_aio_and_compute.cfg
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
%post --erroronfail
|
||||||
|
|
||||||
|
# Source common functions
|
||||||
|
. /tmp/ks-functions.sh
|
||||||
|
|
||||||
|
# Source the generated platform.conf
|
||||||
|
. /etc/platform/platform.conf
|
||||||
|
|
||||||
|
# Update grub with custom kernel bootargs
|
||||||
|
source /etc/init.d/cpumap_functions.sh
|
||||||
|
n_cpus=$(cat /proc/cpuinfo 2>/dev/null | \
|
||||||
|
awk '/^[pP]rocessor/ { n +=1 } END { print (n>0) ? n : 1}')
|
||||||
|
n_numa=$(ls -d /sys/devices/system/node/node* 2>/dev/null | wc -l)
|
||||||
|
KERN_OPTS=" iommu=pt usbcore.autosuspend=-1"
|
||||||
|
|
||||||
|
# Add kernel options for hugepages
|
||||||
|
if grep -q pdpe1gb /proc/cpuinfo
|
||||||
|
then
|
||||||
|
KERN_OPTS="${KERN_OPTS} hugepagesz=1G hugepages=${n_numa}"
|
||||||
|
KERN_OPTS="${KERN_OPTS} hugepagesz=2M hugepages=0 default_hugepagesz=2M"
|
||||||
|
else
|
||||||
|
KERN_OPTS="${KERN_OPTS} hugepagesz=2M hugepages=0 default_hugepagesz=2M"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If this is an all-in-one system, we need at least 4 CPUs
|
||||||
|
if [ "$system_type" = "All-in-one" -a ${n_cpus} -lt 4 ]; then
|
||||||
|
report_post_failure_with_msg "ERROR: At least 4 CPUs are required for controller+compute node."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Add kernel options for cpu isolation / affinity
|
||||||
|
if [ ${n_cpus} -gt 1 ]
|
||||||
|
then
|
||||||
|
base_cpulist=$(platform_expanded_cpu_list)
|
||||||
|
base_cpumap=$(cpulist_to_cpumap ${base_cpulist} ${n_cpus})
|
||||||
|
avp_cpulist=$(vswitch_expanded_cpu_list)
|
||||||
|
norcu_cpumap=$(invert_cpumap ${base_cpumap} ${n_cpus})
|
||||||
|
norcu_cpulist=$(cpumap_to_cpulist ${norcu_cpumap} ${n_cpus})
|
||||||
|
|
||||||
|
if [[ "$subfunction" =~ lowlatency ]]; then
|
||||||
|
KERN_OPTS="${KERN_OPTS} isolcpus=${norcu_cpulist}"
|
||||||
|
KERN_OPTS="${KERN_OPTS} nohz_full=${norcu_cpulist}"
|
||||||
|
else
|
||||||
|
KERN_OPTS="${KERN_OPTS} isolcpus=${avp_cpulist}"
|
||||||
|
fi
|
||||||
|
KERN_OPTS="${KERN_OPTS} rcu_nocbs=${norcu_cpulist}"
|
||||||
|
KERN_OPTS="${KERN_OPTS} kthread_cpus=${base_cpulist}"
|
||||||
|
KERN_OPTS="${KERN_OPTS} irqaffinity=${base_cpulist}"
|
||||||
|
# Update vswitch.conf
|
||||||
|
sed -i "s/^VSWITCH_CPU_LIST=.*/VSWITCH_CPU_LIST=\"${avp_cpulist}\"/" /etc/vswitch/vswitch.conf
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Add kernel options to ensure an selinux is disabled
|
||||||
|
KERN_OPTS="${KERN_OPTS} selinux=0 enforcing=0"
|
||||||
|
|
||||||
|
# Add kernel options to set NMI watchdog
|
||||||
|
if [[ "$subfunction" =~ lowlatency ]]; then
|
||||||
|
KERN_OPTS="${KERN_OPTS} nmi_watchdog=0 softlockup_panic=0"
|
||||||
|
else
|
||||||
|
KERN_OPTS="${KERN_OPTS} nmi_watchdog=panic,1 softlockup_panic=1"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$(dmidecode -s system-product-name)" =~ ^ProLiant.*Gen8$ ]]; then
|
||||||
|
KERN_OPTS="${KERN_OPTS} intel_iommu=on,eth_no_rmrr"
|
||||||
|
else
|
||||||
|
KERN_OPTS="${KERN_OPTS} intel_iommu=on"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Add kernel option to disable biosdevname if enabled
|
||||||
|
# As this may already be in GRUB_CMDLINE_LINUX, only add if it is not already present
|
||||||
|
grep -q '^GRUB_CMDLINE_LINUX=.*biosdevname=0' /etc/default/grub
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
KERN_OPTS="${KERN_OPTS} biosdevname=0"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Add kernel options to disable kvm-intel.eptad on Broadwell
|
||||||
|
# Broadwell: Model: 79, Model name: Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
|
||||||
|
if grep -q -E "^model\s+:\s+79$" /proc/cpuinfo
|
||||||
|
then
|
||||||
|
KERN_OPTS="${KERN_OPTS} kvm-intel.eptad=0"
|
||||||
|
fi
|
||||||
|
|
||||||
|
KERN_OPTS="${KERN_OPTS} cgroup_disable=memory"
|
||||||
|
|
||||||
|
# Add kernel option to avoid jiffies_lock contention on real-time kernel
|
||||||
|
if [[ "$subfunction" =~ lowlatency ]]; then
|
||||||
|
KERN_OPTS="${KERN_OPTS} skew_tick=1"
|
||||||
|
fi
|
||||||
|
|
||||||
|
perl -pi -e 's/(GRUB_CMDLINE_LINUX=.*)\"/\1'"$KERN_OPTS"'\"/g' /etc/default/grub
|
||||||
|
|
||||||
|
if [ -d /sys/firmware/efi ] ; then
|
||||||
|
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
|
||||||
|
else
|
||||||
|
grub2-mkconfig -o /boot/grub2/grub.cfg
|
||||||
|
fi
|
||||||
|
|
||||||
|
%end
|
||||||
|
|
38
bsp-files/kickstarts/post_kernel_controller.cfg
Normal file
38
bsp-files/kickstarts/post_kernel_controller.cfg
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
%post --erroronfail
|
||||||
|
|
||||||
|
# Source common functions
|
||||||
|
. /tmp/ks-functions.sh
|
||||||
|
|
||||||
|
## Custom kernel options
|
||||||
|
KERN_OPTS=" intel_iommu=off usbcore.autosuspend=-1"
|
||||||
|
|
||||||
|
## Setup the loop module to support up to 15 partitions so that we can enable the
|
||||||
|
## customer to manually resize images if needed.
|
||||||
|
##
|
||||||
|
KERN_OPTS="${KERN_OPTS} loop.max_part=15"
|
||||||
|
|
||||||
|
## Add kernel options to ensure an selinux is disabled
|
||||||
|
KERN_OPTS="${KERN_OPTS} selinux=0 enforcing=0"
|
||||||
|
|
||||||
|
# Add kernel options to ensure NMI watchdog is enabled, if supported
|
||||||
|
KERN_OPTS="${KERN_OPTS} nmi_watchdog=panic,1 softlockup_panic=1"
|
||||||
|
|
||||||
|
# Add kernel option to disable biosdevname if enabled
|
||||||
|
# As this may already be in GRUB_CMDLINE_LINUX, only add if it is not already present
|
||||||
|
grep -q '^GRUB_CMDLINE_LINUX=.*biosdevname=0' /etc/default/grub
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
KERN_OPTS="${KERN_OPTS} biosdevname=0"
|
||||||
|
fi
|
||||||
|
|
||||||
|
KERN_OPTS="${KERN_OPTS} cgroup_disable=memory"
|
||||||
|
|
||||||
|
perl -pi -e 's/(GRUB_CMDLINE_LINUX=.*)\"/\1'"$KERN_OPTS"'\"/g' /etc/default/grub
|
||||||
|
|
||||||
|
if [ -d /sys/firmware/efi ] ; then
|
||||||
|
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
|
||||||
|
else
|
||||||
|
grub2-mkconfig -o /boot/grub2/grub.cfg
|
||||||
|
fi
|
||||||
|
|
||||||
|
%end
|
||||||
|
|
32
bsp-files/kickstarts/post_kernel_storage.cfg
Normal file
32
bsp-files/kickstarts/post_kernel_storage.cfg
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
%post --erroronfail
|
||||||
|
|
||||||
|
# Source common functions
|
||||||
|
. /tmp/ks-functions.sh
|
||||||
|
|
||||||
|
## Custom kernel options
|
||||||
|
KERN_OPTS=" intel_iommu=off usbcore.autosuspend=-1"
|
||||||
|
## Add kernel options to ensure an selinux is disabled
|
||||||
|
KERN_OPTS="${KERN_OPTS} selinux=0 enforcing=0"
|
||||||
|
|
||||||
|
# Add kernel options to ensure NMI watchdog is enabled, if supported
|
||||||
|
KERN_OPTS="${KERN_OPTS} nmi_watchdog=panic,1 softlockup_panic=1"
|
||||||
|
|
||||||
|
# Add kernel option to disable biosdevname if enabled
|
||||||
|
# As this may already be in GRUB_CMDLINE_LINUX, only add if it is not already present
|
||||||
|
grep -q '^GRUB_CMDLINE_LINUX=.*biosdevname=0' /etc/default/grub
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
KERN_OPTS="${KERN_OPTS} biosdevname=0"
|
||||||
|
fi
|
||||||
|
|
||||||
|
KERN_OPTS="${KERN_OPTS} cgroup_disable=memory"
|
||||||
|
|
||||||
|
perl -pi -e 's/(GRUB_CMDLINE_LINUX=.*)\"/\1'"$KERN_OPTS"'\"/g' /etc/default/grub
|
||||||
|
|
||||||
|
if [ -d /sys/firmware/efi ] ; then
|
||||||
|
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
|
||||||
|
else
|
||||||
|
grub2-mkconfig -o /boot/grub2/grub.cfg
|
||||||
|
fi
|
||||||
|
|
||||||
|
%end
|
||||||
|
|
12
bsp-files/kickstarts/post_lvm_no_pv_on_rootfs.cfg
Normal file
12
bsp-files/kickstarts/post_lvm_no_pv_on_rootfs.cfg
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
%post --erroronfail
|
||||||
|
|
||||||
|
# Source common functions
|
||||||
|
. /tmp/ks-functions.sh
|
||||||
|
|
||||||
|
# uncomment the global_filter line in lvm.conf
|
||||||
|
perl -0777 -i.bak -pe 's:(# This configuration option has an automatic default value\.\n)\t# global_filter:$1 global_filter:m' /etc/lvm/lvm.conf
|
||||||
|
|
||||||
|
# Edit the LVM config so LVM does not look for LVs (we have none on compute nodes)
|
||||||
|
sed -i "s#^\( *\)global_filter = \[.*#\1global_filter = [ \"r|.*|\" ]#" /etc/lvm/lvm.conf
|
||||||
|
%end
|
||||||
|
|
17
bsp-files/kickstarts/post_lvm_pv_on_rootfs.cfg
Normal file
17
bsp-files/kickstarts/post_lvm_pv_on_rootfs.cfg
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
%post --erroronfail
|
||||||
|
|
||||||
|
# Source common functions
|
||||||
|
. /tmp/ks-functions.sh
|
||||||
|
|
||||||
|
# uncomment the global_filter line in lvm.conf
|
||||||
|
perl -0777 -i.bak -pe 's:(# This configuration option has an automatic default value\.\n)\t# global_filter:$1 global_filter:m' /etc/lvm/lvm.conf
|
||||||
|
|
||||||
|
# Determine which disk we created our PV on (i.e. the root disk)
|
||||||
|
ROOTDISK=$(get_by_path $(pvdisplay --select 'vg_name=cgts-vg' -C -o pv_name --noheadings))
|
||||||
|
if [ -z "$ROOTDISK" ]; then
|
||||||
|
report_post_failure_with_msg "ERROR: failed to identify rootdisk via pvdisplay"
|
||||||
|
fi
|
||||||
|
# Edit the LVM config so LVM only looks for LVs on the root disk
|
||||||
|
sed -i "s#^\( *\)global_filter = \[.*#\1global_filter = [ \"a|${ROOTDISK}|\", \"r|.*|\" ]#" /etc/lvm/lvm.conf
|
||||||
|
%end
|
||||||
|
|
127
bsp-files/kickstarts/post_net_common.cfg
Executable file
127
bsp-files/kickstarts/post_net_common.cfg
Executable file
@ -0,0 +1,127 @@
|
|||||||
|
repo --name=base --baseurl=http://pxecontroller/feed/rel-xxxPLATFORM_RELEASExxx/
|
||||||
|
repo --name=updates --baseurl=http://pxecontroller/updates/rel-xxxPLATFORM_RELEASExxx/
|
||||||
|
|
||||||
|
%post --erroronfail
|
||||||
|
|
||||||
|
# Source common functions
|
||||||
|
. /tmp/ks-functions.sh
|
||||||
|
|
||||||
|
# Obtain the boot interface from the PXE boot
|
||||||
|
BOOTIF=`cat /proc/cmdline |xargs -n1 echo |grep BOOTIF=`
|
||||||
|
if [ -d /sys/firmware/efi ] ; then
|
||||||
|
BOOTIF=${BOOTIF#BOOTIF=}
|
||||||
|
else
|
||||||
|
BOOTIF=${BOOTIF#BOOTIF=01-}
|
||||||
|
BOOTIF=${BOOTIF//-/:}
|
||||||
|
fi
|
||||||
|
|
||||||
|
mgmt_dev=none
|
||||||
|
mgmt_vlan=0
|
||||||
|
if [ -n "$BOOTIF" ] ; then
|
||||||
|
ndev=`ip link show |grep -B 1 $BOOTIF |head -1 |awk '{print $2}' |sed -e 's/://'`
|
||||||
|
if [ -n "$ndev" ] ; then
|
||||||
|
mgmt_dev=$ndev
|
||||||
|
# Retrieve the management VLAN from sysinv if it exists
|
||||||
|
mgmt_vlan=`curl -sf http://pxecontroller:6385/v1/isystems/mgmtvlan`
|
||||||
|
if [ $? -ne 0 ]
|
||||||
|
then
|
||||||
|
report_post_failure_with_msg "ERROR: Unable to communicate with System Inventory REST API. Aborting installation."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
report_post_failure_with_msg "ERROR: Unable to determine mgmt interface from BOOTIF=$BOOTIF."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
report_post_failure_with_msg "ERROR: BOOTIF is not set. Unable to determine mgmt interface."
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $mgmt_vlan -eq 0 ] ; then
|
||||||
|
|
||||||
|
# Persist the boot device to the platform configuration. This will get
|
||||||
|
# overwritten later if the management_interface is on a bonded interface.
|
||||||
|
echo management_interface=$mgmt_dev >> /etc/platform/platform.conf
|
||||||
|
|
||||||
|
# Build networking scripts
|
||||||
|
cat << EOF > /etc/sysconfig/network-scripts/ifcfg-lo
|
||||||
|
DEVICE=lo
|
||||||
|
IPADDR=127.0.0.1
|
||||||
|
NETMASK=255.0.0.0
|
||||||
|
NETWORK=127.0.0.0
|
||||||
|
BROADCAST=127.255.255.255
|
||||||
|
ONBOOT=yes
|
||||||
|
NAME=loopback
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat << EOF > /etc/sysconfig/network-scripts/ifcfg-$mgmt_dev
|
||||||
|
DEVICE=$mgmt_dev
|
||||||
|
BOOTPROTO=dhcp
|
||||||
|
ONBOOT=yes
|
||||||
|
LINKDELAY=20
|
||||||
|
EOF
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
# Check whether to use inet or inet6
|
||||||
|
ipv6_addr=$(dig +short AAAA controller)
|
||||||
|
if [[ -n "$ipv6_addr" ]]
|
||||||
|
then
|
||||||
|
mgmt_address_family=inet6
|
||||||
|
ipv6init=yes
|
||||||
|
dhcpv6c=yes
|
||||||
|
dhclientargs=-1
|
||||||
|
else
|
||||||
|
mgmt_address_family=inet
|
||||||
|
ipv6init=no
|
||||||
|
dhcpv6c=no
|
||||||
|
dhclientargs=
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Persist the boot device to the platform configuration. This will get
|
||||||
|
# overwritten later if the management_interface is on a bonded interface.
|
||||||
|
echo management_interface=$mgmt_dev.$mgmt_vlan >> /etc/platform/platform.conf
|
||||||
|
|
||||||
|
# Build networking scripts
|
||||||
|
cat << EOF > /etc/sysconfig/network-scripts/ifcfg-lo
|
||||||
|
DEVICE=lo
|
||||||
|
IPADDR=127.0.0.1
|
||||||
|
NETMASK=255.0.0.0
|
||||||
|
NETWORK=127.0.0.0
|
||||||
|
BROADCAST=127.255.255.255
|
||||||
|
ONBOOT=yes
|
||||||
|
NAME=loopback
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat << EOF > /etc/sysconfig/network-scripts/ifcfg-$mgmt_dev
|
||||||
|
DEVICE=$mgmt_dev
|
||||||
|
BOOTPROTO=none
|
||||||
|
ONBOOT=yes
|
||||||
|
LINKDELAY=20
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat << EOF > /etc/sysconfig/network-scripts/ifcfg-$mgmt_dev.$mgmt_vlan
|
||||||
|
DEVICE=$mgmt_dev.$mgmt_vlan
|
||||||
|
BOOTPROTO=dhcp
|
||||||
|
DHCLIENTARGS=$dhclientargs
|
||||||
|
IPV6INIT=$ipv6init
|
||||||
|
DHCPV6C=$dhcpv6c
|
||||||
|
ONBOOT=yes
|
||||||
|
VLAN=yes
|
||||||
|
LINKDELAY=20
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Reject DHCPOFFER from DHCP server that doesn't send
|
||||||
|
# wrs-install-uuid option
|
||||||
|
echo "require wrs-install-uuid;" >>/etc/dhcp/dhclient.conf
|
||||||
|
echo "require dhcp6.wrs-install-uuid;" >>/etc/dhcp/dhclient.conf
|
||||||
|
|
||||||
|
# Bring up the mgmt vlan so that a dhcp lease is acquired and an address is
|
||||||
|
# setup prior to the post-install reboot. This is so that the timing of the IP
|
||||||
|
# address allocation is similar to how normal/non-pxe installation works.
|
||||||
|
mgmt_iface=$mgmt_dev.$mgmt_vlan
|
||||||
|
dhclient_family=$([[ $mgmt_address_family == "inet" ]] && echo -4 || echo -6)
|
||||||
|
ip link add link $mgmt_dev name $mgmt_iface type vlan id $mgmt_vlan
|
||||||
|
ip link set up dev $mgmt_iface
|
||||||
|
dhclient $dhclient_family $mgmt_iface || true
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
%end
|
79
bsp-files/kickstarts/post_net_controller.cfg
Normal file
79
bsp-files/kickstarts/post_net_controller.cfg
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
%post --erroronfail
|
||||||
|
|
||||||
|
# Source common functions
|
||||||
|
. /tmp/ks-functions.sh
|
||||||
|
|
||||||
|
# Retrieve the installation uuid from the controller we booted from
|
||||||
|
INSTALL_UUID=`curl -sf http://pxecontroller/feed/rel-xxxPLATFORM_RELEASExxx/install_uuid`
|
||||||
|
if [ $? -ne 0 ]
|
||||||
|
then
|
||||||
|
INSTALL_UUID=unknown
|
||||||
|
fi
|
||||||
|
|
||||||
|
grep -q INSTALL_UUID /etc/platform/platform.conf
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "INSTALL_UUID=$INSTALL_UUID" >> /etc/platform/platform.conf
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd /www/pages
|
||||||
|
# Sync software repository
|
||||||
|
feed_url=http://pxecontroller/feed/
|
||||||
|
anaconda_logdir=/var/log/anaconda
|
||||||
|
mkdir -p $anaconda_logdir
|
||||||
|
|
||||||
|
echo "Mirroring software repository (may take several minutes)..." >/dev/console
|
||||||
|
wget --mirror --no-parent --no-host-directories --reject 'index.html*' --reject '*.log' $feed_url/ -o $anaconda_logdir/wget-feed-mirror.log \
|
||||||
|
|| report_post_failure_with_logfile $anaconda_logdir/wget-feed-mirror.log
|
||||||
|
|
||||||
|
# Sync patching repository
|
||||||
|
updates_url=http://pxecontroller/updates/
|
||||||
|
wget --mirror --no-parent --no-host-directories --reject 'index.html*' --reject '*.log' $updates_url/ -o $anaconda_logdir/wget-updates-mirror.log \
|
||||||
|
|| report_post_failure_with_logfile $anaconda_logdir/wget-updates-mirror.log
|
||||||
|
echo "Done" >/dev/console
|
||||||
|
|
||||||
|
shopt -s nullglob
|
||||||
|
|
||||||
|
# Check whether a second release is installed
|
||||||
|
. /etc/build.info
|
||||||
|
CURRENT_REL_DIR=rel-${SW_VERSION}
|
||||||
|
OTHER_REL_DIR=
|
||||||
|
for REL_DIR in /www/pages/feed/*; do
|
||||||
|
if [[ ! $REL_DIR =~ "${SW_VERSION}" ]]; then
|
||||||
|
OTHER_REL_DIR=`basename $REL_DIR`
|
||||||
|
OTHER_REL_VERSION=${OTHER_REL_DIR:4}
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# If second release is installed, find the latest version of the installer
|
||||||
|
# RPM and install the pxeboot files we require to boot hosts with that release.
|
||||||
|
if [ ! -z "$OTHER_REL_DIR" ]; then
|
||||||
|
PATCH_RPM=`find /www/pages/updates/${OTHER_REL_DIR}/Packages -name 'pxe-network-installer*' | sort -V | tail -1`
|
||||||
|
BASE_RPM=`find /www/pages/feed/${OTHER_REL_DIR}/Packages -name 'pxe-network-installer*' | sort -V | tail -1`
|
||||||
|
|
||||||
|
if [ ! -z "$PATCH_RPM" ]; then
|
||||||
|
INSTALL_RPM=$PATCH_RPM
|
||||||
|
elif [ ! -z "$BASE_RPM" ]; then
|
||||||
|
INSTALL_RPM=$BASE_RPM
|
||||||
|
else
|
||||||
|
report_post_failure_with_msg "ERROR: Unable to find pxe-network-installer RPM for $OTHER_REL_DIR. Aborting installation."
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Installing pxeboot files for release $OTHER_REL_DIR from $INSTALL_RPM" >/dev/console
|
||||||
|
TMP_RPM=/tmp/pxe-network-installer
|
||||||
|
mkdir $TMP_RPM
|
||||||
|
pushd $TMP_RPM
|
||||||
|
/usr/bin/rpm2cpio $INSTALL_RPM | cpio -idm \
|
||||||
|
|| report_post_failure_with_msg "Failed to extract pxe-network-installer"
|
||||||
|
|
||||||
|
cp -r $TMP_RPM/usr / \
|
||||||
|
|| report_post_failure_with_msg "Failed to copy pxe-network-installer /usr"
|
||||||
|
cp -r $TMP_RPM/pxeboot/$OTHER_REL_DIR /pxeboot/ \
|
||||||
|
|| report_post_failure_with_msg "Failed to copy pxe-network-installer /pxeboot/$OTHER_REL_DIR"
|
||||||
|
cp $TMP_RPM/pxeboot/pxelinux.cfg.files/*-$OTHER_REL_VERSION /pxeboot/pxelinux.cfg.files/ \
|
||||||
|
|| report_post_failure_with_msg "Failed to copy pxe-network-installer pxelinux.cfg files"
|
||||||
|
|
||||||
|
rm -rf $TMP_RPM
|
||||||
|
fi
|
||||||
|
|
||||||
|
%end
|
22
bsp-files/kickstarts/post_platform_conf_aio.cfg
Normal file
22
bsp-files/kickstarts/post_platform_conf_aio.cfg
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
%post --erroronfail
|
||||||
|
|
||||||
|
# Source common functions
|
||||||
|
. /tmp/ks-functions.sh
|
||||||
|
|
||||||
|
# Set the security profile mode
|
||||||
|
secprofile="standard"
|
||||||
|
profile_mode=`cat /proc/cmdline |xargs -n1 echo |grep security_profile= | grep extended`
|
||||||
|
if [ -n "$profile_mode" ]; then
|
||||||
|
secprofile="extended"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p -m 0775 /etc/platform
|
||||||
|
cat <<EOF > /etc/platform/platform.conf
|
||||||
|
nodetype=controller
|
||||||
|
subfunction=controller,compute
|
||||||
|
system_type=All-in-one
|
||||||
|
security_profile=$secprofile
|
||||||
|
EOF
|
||||||
|
|
||||||
|
%end
|
||||||
|
|
22
bsp-files/kickstarts/post_platform_conf_aio_lowlatency.cfg
Normal file
22
bsp-files/kickstarts/post_platform_conf_aio_lowlatency.cfg
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
%post --erroronfail
|
||||||
|
|
||||||
|
# Source common functions
|
||||||
|
. /tmp/ks-functions.sh
|
||||||
|
|
||||||
|
# Set the security profile mode
|
||||||
|
secprofile="standard"
|
||||||
|
profile_mode=`cat /proc/cmdline |xargs -n1 echo |grep security_profile= | grep extended`
|
||||||
|
if [ -n "$profile_mode" ]; then
|
||||||
|
secprofile="extended"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p -m 0775 /etc/platform
|
||||||
|
cat <<EOF > /etc/platform/platform.conf
|
||||||
|
nodetype=controller
|
||||||
|
subfunction=controller,compute,lowlatency
|
||||||
|
system_type=All-in-one
|
||||||
|
security_profile=$secprofile
|
||||||
|
EOF
|
||||||
|
|
||||||
|
%end
|
||||||
|
|
34
bsp-files/kickstarts/post_platform_conf_compute.cfg
Normal file
34
bsp-files/kickstarts/post_platform_conf_compute.cfg
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
%post --erroronfail
|
||||||
|
|
||||||
|
# Source common functions
|
||||||
|
. /tmp/ks-functions.sh
|
||||||
|
|
||||||
|
# Retrieve the installation uuid from the controller we booted from
|
||||||
|
INSTALL_UUID=`curl -sf http://pxecontroller/feed/rel-xxxPLATFORM_RELEASExxx/install_uuid`
|
||||||
|
if [ $? -ne 0 ]
|
||||||
|
then
|
||||||
|
INSTALL_UUID=unknown
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set the security profile mode
|
||||||
|
secprofile="standard"
|
||||||
|
profile_mode=`cat /proc/cmdline |xargs -n1 echo |grep security_profile= | grep extended`
|
||||||
|
if [ -n "$profile_mode" ]; then
|
||||||
|
secprofile="extended"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p -m 0775 /etc/platform
|
||||||
|
cat <<EOF > /etc/platform/platform.conf
|
||||||
|
nodetype=compute
|
||||||
|
subfunction=compute
|
||||||
|
system_type=Standard
|
||||||
|
security_profile=$secprofile
|
||||||
|
INSTALL_UUID=$INSTALL_UUID
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# mount the platform directory from the controller
|
||||||
|
cat >> /etc/fstab <<EOF
|
||||||
|
controller-platform-nfs:/opt/platform /opt/platform nfs timeo=30,udp,rsize=1024,wsize=1024,_netdev 0 0
|
||||||
|
EOF
|
||||||
|
|
||||||
|
%end
|
@ -0,0 +1,34 @@
|
|||||||
|
%post --erroronfail
|
||||||
|
|
||||||
|
# Source common functions
|
||||||
|
. /tmp/ks-functions.sh
|
||||||
|
|
||||||
|
# Retrieve the installation uuid from the controller we booted from
|
||||||
|
INSTALL_UUID=`curl -sf http://pxecontroller/feed/rel-xxxPLATFORM_RELEASExxx/install_uuid`
|
||||||
|
if [ $? -ne 0 ]
|
||||||
|
then
|
||||||
|
INSTALL_UUID=unknown
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set the security profile mode
|
||||||
|
secprofile="standard"
|
||||||
|
profile_mode=`cat /proc/cmdline |xargs -n1 echo |grep security_profile= | grep extended`
|
||||||
|
if [ -n "$profile_mode" ]; then
|
||||||
|
secprofile="extended"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p -m 0775 /etc/platform
|
||||||
|
cat <<EOF > /etc/platform/platform.conf
|
||||||
|
nodetype=compute
|
||||||
|
subfunction=compute,lowlatency
|
||||||
|
system_type=Standard
|
||||||
|
security_profile=$secprofile
|
||||||
|
INSTALL_UUID=$INSTALL_UUID
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# mount the platform directory from the controller
|
||||||
|
cat >> /etc/fstab <<EOF
|
||||||
|
controller-platform-nfs:/opt/platform /opt/platform nfs timeo=30,udp,rsize=1024,wsize=1024,_netdev 0 0
|
||||||
|
EOF
|
||||||
|
|
||||||
|
%end
|
22
bsp-files/kickstarts/post_platform_conf_controller.cfg
Normal file
22
bsp-files/kickstarts/post_platform_conf_controller.cfg
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
%post --erroronfail
|
||||||
|
|
||||||
|
# Source common functions
|
||||||
|
. /tmp/ks-functions.sh
|
||||||
|
|
||||||
|
# Set the security profile mode
|
||||||
|
secprofile="standard"
|
||||||
|
profile_mode=`cat /proc/cmdline |xargs -n1 echo |grep security_profile= | grep extended`
|
||||||
|
if [ -n "$profile_mode" ]; then
|
||||||
|
secprofile="extended"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p -m 0775 /etc/platform
|
||||||
|
cat <<EOF > /etc/platform/platform.conf
|
||||||
|
nodetype=controller
|
||||||
|
subfunction=controller
|
||||||
|
system_type=Standard
|
||||||
|
security_profile=$secprofile
|
||||||
|
EOF
|
||||||
|
|
||||||
|
%end
|
||||||
|
|
29
bsp-files/kickstarts/post_platform_conf_storage.cfg
Normal file
29
bsp-files/kickstarts/post_platform_conf_storage.cfg
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
%post --erroronfail
|
||||||
|
|
||||||
|
# Source common functions
|
||||||
|
. /tmp/ks-functions.sh
|
||||||
|
|
||||||
|
# Retrieve the installation uuid from the controller we booted from
|
||||||
|
INSTALL_UUID=`curl -sf http://pxecontroller/feed/rel-xxxPLATFORM_RELEASExxx/install_uuid`
|
||||||
|
if [ $? -ne 0 ]
|
||||||
|
then
|
||||||
|
INSTALL_UUID=unknown
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set the security profile mode
|
||||||
|
secprofile="standard"
|
||||||
|
profile_mode=`cat /proc/cmdline |xargs -n1 echo |grep security_profile= | grep extended`
|
||||||
|
if [ -n "$profile_mode" ]; then
|
||||||
|
secprofile="extended"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p -m 0775 /etc/platform
|
||||||
|
cat <<EOF > /etc/platform/platform.conf
|
||||||
|
nodetype=storage
|
||||||
|
subfunction=storage
|
||||||
|
system_type=Standard
|
||||||
|
security_profile=$secprofile
|
||||||
|
INSTALL_UUID=$INSTALL_UUID
|
||||||
|
EOF
|
||||||
|
|
||||||
|
%end
|
114
bsp-files/kickstarts/post_pxeboot_controller.cfg
Normal file
114
bsp-files/kickstarts/post_pxeboot_controller.cfg
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
%pre --erroronfail
|
||||||
|
|
||||||
|
# Source common functions
|
||||||
|
. /tmp/ks-functions.sh
|
||||||
|
|
||||||
|
echo "repo --name=base --baseurl=xxxHTTP_URLxxx/" > /tmp/repo-include
|
||||||
|
echo "repo --name=updates --baseurl=xxxHTTP_URLxxx/patches/" > /tmp/repo-include
|
||||||
|
%end
|
||||||
|
|
||||||
|
# Repository arguments from %pre
|
||||||
|
%include /tmp/repo-include
|
||||||
|
|
||||||
|
|
||||||
|
%post --erroronfail
|
||||||
|
|
||||||
|
# Source common functions
|
||||||
|
. /tmp/ks-functions.sh
|
||||||
|
|
||||||
|
# Obtain the boot interface from the PXE boot
|
||||||
|
BOOTIF=`cat /proc/cmdline |xargs -n1 echo |grep BOOTIF=`
|
||||||
|
if [ -d /sys/firmware/efi ] ; then
|
||||||
|
BOOTIF=${BOOTIF#BOOTIF=}
|
||||||
|
else
|
||||||
|
BOOTIF=${BOOTIF#BOOTIF=01-}
|
||||||
|
BOOTIF=${BOOTIF//-/:}
|
||||||
|
fi
|
||||||
|
|
||||||
|
mgmt_dev=none
|
||||||
|
if [ -n "$BOOTIF" ] ; then
|
||||||
|
ndev=`ip link show |grep -B 1 $BOOTIF |head -1 |awk '{print $2}' |sed -e 's/://'`
|
||||||
|
if [ -n "$ndev" ] ; then
|
||||||
|
mgmt_dev=$ndev
|
||||||
|
else
|
||||||
|
report_post_failure_with_msg "ERROR: Unable to determine mgmt interface from BOOTIF=$BOOTIF."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
report_post_failure_with_msg "ERROR: BOOTIF is not set. Unable to determine mgmt interface."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Persist the boot device to the platform configuration. This will get
|
||||||
|
# overwritten when config_controller is run.
|
||||||
|
echo management_interface=$mgmt_dev >> /etc/platform/platform.conf
|
||||||
|
|
||||||
|
# Build networking scripts
|
||||||
|
cat << EOF > /etc/sysconfig/network-scripts/ifcfg-lo
|
||||||
|
DEVICE=lo
|
||||||
|
IPADDR=127.0.0.1
|
||||||
|
NETMASK=255.0.0.0
|
||||||
|
NETWORK=127.0.0.0
|
||||||
|
BROADCAST=127.255.255.255
|
||||||
|
ONBOOT=yes
|
||||||
|
NAME=loopback
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat << EOF > /etc/sysconfig/network-scripts/ifcfg-$mgmt_dev
|
||||||
|
DEVICE=$mgmt_dev
|
||||||
|
BOOTPROTO=dhcp
|
||||||
|
ONBOOT=yes
|
||||||
|
EOF
|
||||||
|
|
||||||
|
%end
|
||||||
|
|
||||||
|
%post --erroronfail
|
||||||
|
|
||||||
|
# Source common functions
|
||||||
|
. /tmp/ks-functions.sh
|
||||||
|
|
||||||
|
anaconda_logdir=/var/log/anaconda
|
||||||
|
mkdir -p $anaconda_logdir
|
||||||
|
|
||||||
|
cd /www/pages
|
||||||
|
mkdir -p feed/rel-xxxPLATFORM_RELEASExxx/Packages
|
||||||
|
mkdir -p feed/rel-xxxPLATFORM_RELEASExxx/repodata
|
||||||
|
cd feed/rel-xxxPLATFORM_RELEASExxx
|
||||||
|
feed_url=xxxHTTP_URLxxx
|
||||||
|
declare -i cut_dirs=NUM_DIRS
|
||||||
|
echo "Mirroring software repository (may take several minutes)..." >/dev/console
|
||||||
|
wget --mirror --no-parent --no-host-directories --reject 'index.html*' --cut-dirs=$cut_dirs $feed_url/Packages/ -o $anaconda_logdir/rpmget.log \
|
||||||
|
|| report_post_failure_with_logfile $anaconda_logdir/rpmget.log
|
||||||
|
wget --mirror --no-parent --no-host-directories --reject 'index.html*' --cut-dirs=$cut_dirs $feed_url/repodata/ -o $anaconda_logdir/rpmget_repo.log \
|
||||||
|
|| report_post_failure_with_logfile $anaconda_logdir/rpmget_repo.log
|
||||||
|
wget $feed_url/isolinux.cfg --append $anaconda_logdir/wget_kickstarts.log \
|
||||||
|
|| report_post_failure_with_logfile $anaconda_logdir/wget_kickstarts.log
|
||||||
|
echo "Done" >/dev/console
|
||||||
|
|
||||||
|
patches_url=xxxHTTP_URLxxx/patches
|
||||||
|
wget -q --spider ${patches_url}/
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "Downloading patches..." >/dev/console
|
||||||
|
mkdir -p updates/rel-xxxPLATFORM_RELEASExxx/Packages
|
||||||
|
mkdir -p updates/rel-xxxPLATFORM_RELEASExxx/repodata
|
||||||
|
declare -i patches_cut_dirs=$((cut_dirs+1))
|
||||||
|
|
||||||
|
wget --mirror --no-parent --no-host-directories --reject 'index.html*' --cut-dirs=$patches_cut_dirs $patches_url/Packages/ -o $anaconda_logdir/patches_rpmget.log \
|
||||||
|
|| report_post_failure_with_logfile $anaconda_logdir/patches_rpmget.log
|
||||||
|
wget --mirror --no-parent --no-host-directories --reject 'index.html*' --cut-dirs=$patches_cut_dirs $patches_url/repodata/ -o $anaconda_logdir/patches_rpmget_repo.log \
|
||||||
|
|| report_post_failure_with_logfile $anaconda_logdir/patches_rpmget_repo.log
|
||||||
|
|
||||||
|
mkdir -p /opt/patching/metadata
|
||||||
|
mkdir -p /opt/patching/packages/xxxPLATFORM_RELEASExxx
|
||||||
|
cd /opt/patching
|
||||||
|
wget --mirror --no-parent --no-host-directories --reject 'index.html*' --cut-dirs=$patches_cut_dirs $patches_url/metadata/ -o $anaconda_logdir/patches_rpmget_metadata.log \
|
||||||
|
|| report_post_failure_with_logfile $anaconda_logdir/patches_rpmget_metadata.log
|
||||||
|
find /www/pages/updates/rel-xxxPLATFORM_RELEASExxx/Packages -name '*.rpm' \
|
||||||
|
| xargs --no-run-if-empty -I files cp --preserve=all files /opt/patching/packages/xxxPLATFORM_RELEASExxx/
|
||||||
|
|
||||||
|
echo "Done" >/dev/console
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create a uuid specific to this installation
|
||||||
|
INSTALL_UUID=`uuidgen`
|
||||||
|
echo $INSTALL_UUID > /www/pages/feed/rel-xxxPLATFORM_RELEASExxx/install_uuid
|
||||||
|
echo "INSTALL_UUID=$INSTALL_UUID" >> /etc/platform/platform.conf
|
||||||
|
%end
|
35
bsp-files/kickstarts/post_system_aio.cfg
Normal file
35
bsp-files/kickstarts/post_system_aio.cfg
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
%post --erroronfail
|
||||||
|
|
||||||
|
# Source common functions
|
||||||
|
. /tmp/ks-functions.sh
|
||||||
|
|
||||||
|
# Source the generated platform.conf
|
||||||
|
. /etc/platform/platform.conf
|
||||||
|
|
||||||
|
## Reserve more memory for base processes since the controller has higher
|
||||||
|
## memory requirements but cap it to better handle systems with large
|
||||||
|
## amounts of memory
|
||||||
|
TOTALMEM=$(grep MemTotal /proc/meminfo | awk '{print int($2/1024)}')
|
||||||
|
|
||||||
|
if [ -e /sys/devices/system/node/node0 ]; then
|
||||||
|
RESERVEDMEM=$(grep MemTotal /sys/devices/system/node/node0/meminfo | awk '{printf "%d\n", $4/1024}')
|
||||||
|
else
|
||||||
|
RESERVEDMEM=$(grep MemTotal /proc/meminfo | awk '{print int($2/1024/4)}')
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ${RESERVEDMEM} -lt 6144 ]; then
|
||||||
|
RESERVEDMEM=6144
|
||||||
|
elif [ ${RESERVEDMEM} -gt 14500 ]; then
|
||||||
|
RESERVEDMEM=14500
|
||||||
|
elif [ ${RESERVEDMEM} -gt 8192 ]; then
|
||||||
|
RESERVEDMEM=8192
|
||||||
|
fi
|
||||||
|
|
||||||
|
sed -i -e "s#\(COMPUTE_BASE_RESERVED\)=.*#\1=(\"node0:${RESERVEDMEM}MB:1\" \"node1:2000MB:0\" \"node2:2000MB:0\" \"node3:2000MB:0\")#g" /etc/nova/compute_reserved.conf
|
||||||
|
|
||||||
|
# Update COMPUTE_CPU_LIST
|
||||||
|
N_CPUS=$(cat /proc/cpuinfo 2>/dev/null | awk '/^[pP]rocessor/ { n +=1 } END { print (n>0) ? n : 1}')
|
||||||
|
sed -i "s/^COMPUTE_CPU_LIST=.*/COMPUTE_CPU_LIST=\"0-$((N_CPUS-1))\"/" /etc/nova/compute_reserved.conf
|
||||||
|
|
||||||
|
%end
|
||||||
|
|
80
bsp-files/kickstarts/post_usb_controller.cfg
Normal file
80
bsp-files/kickstarts/post_usb_controller.cfg
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
%pre --erroronfail
|
||||||
|
|
||||||
|
# Source common functions
|
||||||
|
. /tmp/ks-functions.sh
|
||||||
|
|
||||||
|
if [ -d /mnt/install/source ]; then
|
||||||
|
srcdir=/mnt/install/source
|
||||||
|
else
|
||||||
|
srcdir=/run/install/repo
|
||||||
|
fi
|
||||||
|
|
||||||
|
touch /tmp/repo-include
|
||||||
|
|
||||||
|
if [ -d ${srcdir}/patches ]; then
|
||||||
|
echo "repo --name=updates --baseurl=file://${srcdir}/patches/" > /tmp/repo-include
|
||||||
|
fi
|
||||||
|
|
||||||
|
%end
|
||||||
|
|
||||||
|
# Repository arguments from %pre
|
||||||
|
%include /tmp/repo-include
|
||||||
|
|
||||||
|
%post --erroronfail
|
||||||
|
|
||||||
|
# Source common functions
|
||||||
|
. /tmp/ks-functions.sh
|
||||||
|
|
||||||
|
mgmt_dev=none
|
||||||
|
|
||||||
|
# Persist the boot device to the platform configuration. This will get
|
||||||
|
# overwritten when config_controller is run.
|
||||||
|
echo management_interface=$mgmt_dev >> /etc/platform/platform.conf
|
||||||
|
|
||||||
|
# Build networking scripts
|
||||||
|
cat << EOF > /etc/sysconfig/network-scripts/ifcfg-lo
|
||||||
|
DEVICE=lo
|
||||||
|
IPADDR=127.0.0.1
|
||||||
|
NETMASK=255.0.0.0
|
||||||
|
NETWORK=127.0.0.0
|
||||||
|
BROADCAST=127.255.255.255
|
||||||
|
ONBOOT=yes
|
||||||
|
NAME=loopback
|
||||||
|
EOF
|
||||||
|
|
||||||
|
%end
|
||||||
|
|
||||||
|
|
||||||
|
# Note, this section is different and replaced with a wget
|
||||||
|
# if doing the initial install off the network
|
||||||
|
%post --nochroot
|
||||||
|
if [ -d /mnt/install/source ]; then
|
||||||
|
srcdir=/mnt/install/source
|
||||||
|
else
|
||||||
|
srcdir=/run/install/repo
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -d $srcdir/Packages ] ; then
|
||||||
|
mkdir -p /mnt/sysimage/www/pages/feed/rel-xxxPLATFORM_RELEASExxx
|
||||||
|
cp -r $srcdir/Packages /mnt/sysimage/www/pages/feed/rel-xxxPLATFORM_RELEASExxx/Packages
|
||||||
|
cp -r $srcdir/repodata /mnt/sysimage/www/pages/feed/rel-xxxPLATFORM_RELEASExxx/repodata
|
||||||
|
cp $srcdir/*.cfg /mnt/sysimage/www/pages/feed/rel-xxxPLATFORM_RELEASExxx
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -d $srcdir/patches ]; then
|
||||||
|
mkdir -p /mnt/sysimage/www/pages/updates/rel-xxxPLATFORM_RELEASExxx
|
||||||
|
cp -r $srcdir/patches/Packages /mnt/sysimage/www/pages/updates/rel-xxxPLATFORM_RELEASExxx/Packages
|
||||||
|
cp -r $srcdir/patches/repodata /mnt/sysimage/www/pages/updates/rel-xxxPLATFORM_RELEASExxx/repodata
|
||||||
|
mkdir -p /mnt/sysimage/opt/patching
|
||||||
|
cp -r $srcdir/patches/metadata /mnt/sysimage/opt/patching/metadata
|
||||||
|
mkdir -p /mnt/sysimage/opt/patching/packages/xxxPLATFORM_RELEASExxx
|
||||||
|
|
||||||
|
find /mnt/sysimage/www/pages/updates/rel-xxxPLATFORM_RELEASExxx/Packages -name '*.rpm' \
|
||||||
|
| xargs --no-run-if-empty -I files cp --preserve=all files /mnt/sysimage/opt/patching/packages/xxxPLATFORM_RELEASExxx/
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create a uuid specific to this installation
|
||||||
|
INSTALL_UUID=`uuidgen`
|
||||||
|
echo $INSTALL_UUID > /mnt/sysimage/www/pages/feed/rel-xxxPLATFORM_RELEASExxx/install_uuid
|
||||||
|
echo "INSTALL_UUID=$INSTALL_UUID" >> /mnt/sysimage/etc/platform/platform.conf
|
||||||
|
%end
|
115
bsp-files/kickstarts/post_yow_controller.cfg
Normal file
115
bsp-files/kickstarts/post_yow_controller.cfg
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
%pre --erroronfail
|
||||||
|
|
||||||
|
# Source common functions
|
||||||
|
. /tmp/ks-functions.sh
|
||||||
|
|
||||||
|
echo "repo --name=base --baseurl=http://xxxBOOT_SERVERxxx/umalab/`hostname`_feed/" > /tmp/repo-include
|
||||||
|
echo "repo --name=updates --baseurl=http://xxxBOOT_SERVERxxx/umalab/`hostname`_feed/patches" > /tmp/repo-include
|
||||||
|
%end
|
||||||
|
|
||||||
|
# Repository arguments from %pre
|
||||||
|
%include /tmp/repo-include
|
||||||
|
|
||||||
|
|
||||||
|
%post --erroronfail
|
||||||
|
|
||||||
|
# Source common functions
|
||||||
|
. /tmp/ks-functions.sh
|
||||||
|
|
||||||
|
# Obtain the boot interface from the PXE boot
|
||||||
|
BOOTIF=`cat /proc/cmdline |xargs -n1 echo |grep BOOTIF=`
|
||||||
|
if [ -d /sys/firmware/efi ] ; then
|
||||||
|
BOOTIF=${BOOTIF#BOOTIF=}
|
||||||
|
else
|
||||||
|
BOOTIF=${BOOTIF#BOOTIF=01-}
|
||||||
|
BOOTIF=${BOOTIF//-/:}
|
||||||
|
fi
|
||||||
|
|
||||||
|
mgmt_dev=none
|
||||||
|
if [ -n "$BOOTIF" ] ; then
|
||||||
|
ndev=`ip link show |grep -B 1 $BOOTIF |head -1 |awk '{print $2}' |sed -e 's/://'`
|
||||||
|
if [ -n "$ndev" ] ; then
|
||||||
|
mgmt_dev=$ndev
|
||||||
|
else
|
||||||
|
report_post_failure_with_msg "ERROR: Unable to determine mgmt interface from BOOTIF=$BOOTIF."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
report_post_failure_with_msg "ERROR: BOOTIF is not set. Unable to determine mgmt interface."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Persist the boot device to the platform configuration. This will get
|
||||||
|
# overwritten when config_controller is run.
|
||||||
|
echo management_interface=$mgmt_dev >> /etc/platform/platform.conf
|
||||||
|
|
||||||
|
# Build networking scripts
|
||||||
|
cat << EOF > /etc/sysconfig/network-scripts/ifcfg-lo
|
||||||
|
DEVICE=lo
|
||||||
|
IPADDR=127.0.0.1
|
||||||
|
NETMASK=255.0.0.0
|
||||||
|
NETWORK=127.0.0.0
|
||||||
|
BROADCAST=127.255.255.255
|
||||||
|
ONBOOT=yes
|
||||||
|
NAME=loopback
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat << EOF > /etc/sysconfig/network-scripts/ifcfg-$mgmt_dev
|
||||||
|
DEVICE=$mgmt_dev
|
||||||
|
BOOTPROTO=dhcp
|
||||||
|
ONBOOT=yes
|
||||||
|
LINKDELAY=20
|
||||||
|
EOF
|
||||||
|
|
||||||
|
%end
|
||||||
|
|
||||||
|
%post --erroronfail
|
||||||
|
|
||||||
|
# Source common functions
|
||||||
|
. /tmp/ks-functions.sh
|
||||||
|
|
||||||
|
anaconda_logdir=/var/log/anaconda
|
||||||
|
mkdir -p $anaconda_logdir
|
||||||
|
|
||||||
|
cd /www/pages
|
||||||
|
mkdir -p feed/rel-xxxPLATFORM_RELEASExxx/Packages
|
||||||
|
mkdir -p feed/rel-xxxPLATFORM_RELEASExxx/repodata
|
||||||
|
cd feed/rel-xxxPLATFORM_RELEASExxx
|
||||||
|
feed_url=http://xxxBOOT_SERVERxxx/umalab/`hostname`_feed
|
||||||
|
declare -i cut_dirs=2
|
||||||
|
echo "Mirroring software repository (may take several minutes)..." >/dev/console
|
||||||
|
wget --mirror --no-parent --no-host-directories --reject 'index.html*' --cut-dirs=$cut_dirs $feed_url/Packages/ -o $anaconda_logdir/rpmget.log \
|
||||||
|
|| report_post_failure_with_logfile $anaconda_logdir/rpmget.log
|
||||||
|
wget --mirror --no-parent --no-host-directories --reject 'index.html*' --cut-dirs=$cut_dirs $feed_url/repodata/ -o $anaconda_logdir/rpmget_repo.log \
|
||||||
|
|| report_post_failure_with_logfile $anaconda_logdir/rpmget_repo.log
|
||||||
|
wget $feed_url/isolinux.cfg --append $anaconda_logdir/wget_kickstarts.log \
|
||||||
|
|| report_post_failure_with_logfile $anaconda_logdir/wget_kickstarts.log
|
||||||
|
|
||||||
|
# Check for patches
|
||||||
|
patches_url=http://xxxBOOT_SERVERxxx/umalab/`hostname`_feed/patches
|
||||||
|
wget -q --spider ${patches_url}/
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
cd /www/pages
|
||||||
|
mkdir -p updates/rel-xxxPLATFORM_RELEASExxx/Packages
|
||||||
|
mkdir -p updates/rel-xxxPLATFORM_RELEASExxx/repodata
|
||||||
|
cd updates/rel-xxxPLATFORM_RELEASExxx
|
||||||
|
declare -i patches_cut_dirs=$((cut_dirs+1))
|
||||||
|
wget --mirror --no-parent --no-host-directories --reject 'index.html*' --cut-dirs=$patches_cut_dirs $patches_url/Packages/ -o $anaconda_logdir/patches_rpmget.log \
|
||||||
|
|| report_post_failure_with_logfile $anaconda_logdir/patches_rpmget.log
|
||||||
|
wget --mirror --no-parent --no-host-directories --reject 'index.html*' --cut-dirs=$patches_cut_dirs $patches_url/repodata/ -o $anaconda_logdir/patches_rpmget_repo.log \
|
||||||
|
|| report_post_failure_with_logfile $anaconda_logdir/patches_rpmget_repo.log
|
||||||
|
|
||||||
|
mkdir -p /opt/patching/metadata
|
||||||
|
mkdir -p /opt/patching/packages/xxxPLATFORM_RELEASExxx
|
||||||
|
cd /opt/patching
|
||||||
|
wget --mirror --no-parent --no-host-directories --reject 'index.html*' --cut-dirs=$patches_cut_dirs $patches_url/metadata/ -o $anaconda_logdir/patches_rpmget_metadata.log \
|
||||||
|
|| report_post_failure_with_logfile $anaconda_logdir/patches_rpmget_metadata.log
|
||||||
|
find /www/pages/updates/rel-xxxPLATFORM_RELEASExxx/Packages -name '*.rpm' \
|
||||||
|
| xargs --no-run-if-empty -I files cp --preserve=all files /opt/patching/packages/xxxPLATFORM_RELEASExxx/
|
||||||
|
|
||||||
|
echo "Done" >/dev/console
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create a uuid specific to this installation
|
||||||
|
INSTALL_UUID=`uuidgen`
|
||||||
|
echo $INSTALL_UUID > /www/pages/feed/rel-xxxPLATFORM_RELEASExxx/install_uuid
|
||||||
|
echo "INSTALL_UUID=$INSTALL_UUID" >> /etc/platform/platform.conf
|
||||||
|
%end
|
72
bsp-files/kickstarts/pre_common_head.cfg
Normal file
72
bsp-files/kickstarts/pre_common_head.cfg
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
%pre --erroronfail
|
||||||
|
|
||||||
|
# Source common functions
|
||||||
|
. /tmp/ks-functions.sh
|
||||||
|
|
||||||
|
# First, parse /proc/cmdline to find the boot args
|
||||||
|
set -- `cat /proc/cmdline`
|
||||||
|
for I in $*; do case "$I" in *=*) eval $I 2>/dev/null;; esac; done
|
||||||
|
|
||||||
|
append=
|
||||||
|
if [ -n "$console" ] ; then
|
||||||
|
append="console=$console"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$security_profile" ]; then
|
||||||
|
append="$append security_profile=$security_profile"
|
||||||
|
fi
|
||||||
|
|
||||||
|
#### SECURITY PROFILE HANDLING (Pre Installation) ####
|
||||||
|
if [ -n "$security_profile" ] && [ "$security_profile" == "extended" ]; then
|
||||||
|
# IMA specific boot options:
|
||||||
|
# Enable Kernel auditing
|
||||||
|
append="$append audit=1"
|
||||||
|
else
|
||||||
|
# we need to blacklist the IMA and Integrity Modules
|
||||||
|
# on standard security profile
|
||||||
|
append="$append module_blacklist=integrity,ima"
|
||||||
|
|
||||||
|
# Disable Kernel auditing in Standard Security Profile mode
|
||||||
|
append="$append audit=0"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$tboot" ]; then
|
||||||
|
append="$append tboot=$tboot"
|
||||||
|
else
|
||||||
|
append="$append tboot=false"
|
||||||
|
fi
|
||||||
|
|
||||||
|
boot_device_arg=
|
||||||
|
if [ -n "$boot_device" ] ; then
|
||||||
|
boot_device_arg="--boot-drive=$(get_by_path $boot_device)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "bootloader --location=mbr $boot_device_arg --timeout=5 --append=\"$append\"" > /tmp/bootloader-include
|
||||||
|
|
||||||
|
echo "timezone --nontp --utc UTC" >/tmp/timezone-include
|
||||||
|
%end
|
||||||
|
|
||||||
|
#version=DEVEL
|
||||||
|
install
|
||||||
|
lang en_US.UTF-8
|
||||||
|
keyboard us
|
||||||
|
%include /tmp/timezone-include
|
||||||
|
# set to 'x' so we can use shadow password
|
||||||
|
rootpw --iscrypted x
|
||||||
|
selinux --disabled
|
||||||
|
authconfig --enableshadow --passalgo=sha512
|
||||||
|
firewall --service=ssh
|
||||||
|
|
||||||
|
# The following is the partition information you requested
|
||||||
|
# Note that any partitions you deleted are not expressed
|
||||||
|
# here so unless you clear all partitions first, this is
|
||||||
|
# not guaranteed to work
|
||||||
|
zerombr
|
||||||
|
|
||||||
|
# Disk layout from %pre
|
||||||
|
%include /tmp/part-include
|
||||||
|
# Bootloader parms from %pre
|
||||||
|
%include /tmp/bootloader-include
|
||||||
|
|
||||||
|
reboot --eject
|
||||||
|
|
102
bsp-files/kickstarts/pre_disk_aio.cfg
Executable file
102
bsp-files/kickstarts/pre_disk_aio.cfg
Executable file
@ -0,0 +1,102 @@
|
|||||||
|
|
||||||
|
## NOTE: updates to partition sizes need to be also reflected in
|
||||||
|
## _controller_filesystem_limits() in sysinv/api/controllers/v1/istorconfig.py
|
||||||
|
##
|
||||||
|
## NOTE: When adding partitions, we currently have a max of 4 primary partitions.
|
||||||
|
## If more than 4 partitions are required, we can use a max of 3 --asprimary,
|
||||||
|
## to allow 1 primary logical partition with extended partitions
|
||||||
|
##
|
||||||
|
## NOTE: Max default PV size must align with the default controllerfs sizes
|
||||||
|
##
|
||||||
|
## BACKUP_OVERHEAD = 20
|
||||||
|
##
|
||||||
|
## Physical install
|
||||||
|
## - DB size is doubled to allow for upgrades
|
||||||
|
##
|
||||||
|
## DEFAULT_IMAGE_STOR_SIZE = 10
|
||||||
|
## DEFAULT_DATABASE_STOR_SIZE = 20
|
||||||
|
## DEFAULT_IMG_CONVERSION_STOR_SIZE = 20
|
||||||
|
## BACKUP = DEFAULT_DATABASE_STOR_SIZE + DEFAULT_IMAGE_STOR_SIZE
|
||||||
|
## + BACKUP_OVERHEAD = 50
|
||||||
|
## LOG_VOL_SIZE = 8192
|
||||||
|
## SCRATCH_VOL_SIZE = 8192
|
||||||
|
## RABBIT = 2048
|
||||||
|
## PLATFORM = 2048
|
||||||
|
## ANCHOR = 1024
|
||||||
|
## EXTENSION = 1024
|
||||||
|
## RESERVED_PE = 16 (based on pesize=32768)
|
||||||
|
##
|
||||||
|
## CGCS_PV_SIZE = 10240 + 2*20480 + 20480 + 51200 + 8196 +
|
||||||
|
## 8196 + 2048 + 2048 + 1024 + 1024 + 16 = 145424
|
||||||
|
##
|
||||||
|
## small install - uses is_virtual check
|
||||||
|
## - DB size is doubled to allow for upgrades
|
||||||
|
##
|
||||||
|
## DEFAULT_VIRTUAL_IMAGE_STOR_SIZE = 8
|
||||||
|
## DEFAULT_VIRTUAL_DATABASE_STOR_SIZE = 5
|
||||||
|
## DEFAULT_VIRTUAL_IMG_CONVERSION_STOR_SIZE = 8
|
||||||
|
## DEFAULT_VIRTUAL_BACKUP_STOR_SIZE = 5
|
||||||
|
##
|
||||||
|
## LOG_VOL_SIZE = 4096
|
||||||
|
## SCRATCH_VOL_SIZE = 4096
|
||||||
|
## RABBIT = 2048
|
||||||
|
## PLATFORM = 2048
|
||||||
|
## ANCHOR = 1024
|
||||||
|
## EXTENSION = 1024
|
||||||
|
## RESERVED_PE = 16 (based on pesize=32768)
|
||||||
|
##
|
||||||
|
## CGCS_PV_SIZE = 8192 + 2*5120 + 8192 + 5120 + 4096 +
|
||||||
|
## 4096 + 2048 + 2048 + 1024 + 1024 +16 = 46096
|
||||||
|
##
|
||||||
|
## NOTE: To maintain upgrade compatability within the volume group, keep the
|
||||||
|
## undersized LOG_VOL_SIZE and SCRATCH_VOL_SIZE, but size the minimally size
|
||||||
|
## physical volume correctly.
|
||||||
|
##
|
||||||
|
## R4 AIO installations:
|
||||||
|
## - R4 (case #1): /boot (0.5G), / (20G),
|
||||||
|
## cgts-vg PV (239G), /local_pv (239G)
|
||||||
|
## - R4 (case #2): /boot (0.5G), / (20G),
|
||||||
|
## cgts-vg PV (239G), cgts-vg (239G)
|
||||||
|
##
|
||||||
|
## Upgrade migration will start with R5 install and create a partition to align
|
||||||
|
## above so filesystems within the volume group will be able to maintain their
|
||||||
|
## sizes in R5
|
||||||
|
## - R5 install : /boot (0.5G), / (20G),
|
||||||
|
## cgts-vg PV (142G), un-partitioned (336G)
|
||||||
|
## - R5 (case #1): /boot (0.5G), / (20G),
|
||||||
|
## cgts-vg PV (142G), cgts-vg PV (97G), unpartitioned (239G)
|
||||||
|
## - R5 (case #2): /boot (0.5G), / (20G),
|
||||||
|
## cgts-vg PV (142G), cgts-vg PV (336G)
|
||||||
|
##
|
||||||
|
sz=$(blockdev --getsize64 $(get_disk $rootfs_device))
|
||||||
|
if [ $sz -le $((161*$gb)) ] ; then
|
||||||
|
## This covers vbox or any 55g < disk < 162gb: < 55g won't install
|
||||||
|
LOG_VOL_SIZE=4000
|
||||||
|
SCRATCH_VOL_SIZE=4000
|
||||||
|
ROOTFS_SIZE=10000
|
||||||
|
CGCS_PV_SIZE=46096
|
||||||
|
else
|
||||||
|
LOG_VOL_SIZE=8000
|
||||||
|
SCRATCH_VOL_SIZE=8000
|
||||||
|
ROOTFS_SIZE=20000
|
||||||
|
CGCS_PV_SIZE=145424
|
||||||
|
fi
|
||||||
|
|
||||||
|
ROOTFS_OPTIONS="defaults"
|
||||||
|
profile_mode=`cat /proc/cmdline |xargs -n1 echo |grep security_profile= | grep extended`
|
||||||
|
if [ -n "$profile_mode" ]; then
|
||||||
|
# Enable iversion labelling for rootfs when IMA is enabled
|
||||||
|
ROOTFS_OPTIONS="${ROOTFS_OPTIONS},iversion"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat<<EOF>>/tmp/part-include
|
||||||
|
part /boot --fstype=ext4 --asprimary --size=500 --ondrive=$(get_disk $rootfs_device) --fsoptions="$ROOTFS_OPTIONS"
|
||||||
|
part pv.253004 --grow --size=500 --maxsize=$CGCS_PV_SIZE --ondrive=$(get_disk $rootfs_device)
|
||||||
|
volgroup cgts-vg --pesize=32768 pv.253004
|
||||||
|
logvol /var/log --fstype=ext4 --vgname=cgts-vg --size=$LOG_VOL_SIZE --name=log-lv
|
||||||
|
logvol /scratch --fstype=ext4 --vgname=cgts-vg --size=$SCRATCH_VOL_SIZE --name=scratch-lv
|
||||||
|
part / --fstype=ext4 --asprimary --size=$ROOTFS_SIZE --ondrive=$(get_disk $rootfs_device) --fsoptions="$ROOTFS_OPTIONS"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
%end
|
||||||
|
|
31
bsp-files/kickstarts/pre_disk_compute.cfg
Executable file
31
bsp-files/kickstarts/pre_disk_compute.cfg
Executable file
@ -0,0 +1,31 @@
|
|||||||
|
|
||||||
|
sz=$(blockdev --getsize64 $(get_disk $rootfs_device))
|
||||||
|
if [ $sz -le $((80*$gb)) ] ; then
|
||||||
|
## Less than 80GB use a 10GB root partition
|
||||||
|
LOG_VOL_SIZE=4000
|
||||||
|
SCRATCH_VOL_SIZE=4000
|
||||||
|
ROOTFS_SIZE=10000
|
||||||
|
else
|
||||||
|
## Use a 20GB root partition
|
||||||
|
LOG_VOL_SIZE=4000
|
||||||
|
SCRATCH_VOL_SIZE=4000
|
||||||
|
ROOTFS_SIZE=20000
|
||||||
|
fi
|
||||||
|
|
||||||
|
ROOTFS_OPTIONS="defaults"
|
||||||
|
profile_mode=`cat /proc/cmdline |xargs -n1 echo |grep security_profile= | grep extended`
|
||||||
|
if [ -n "$profile_mode" ]; then
|
||||||
|
# Enable iversion labelling for rootfs when IMA is enabled
|
||||||
|
ROOTFS_OPTIONS="${ROOTFS_OPTIONS},iversion"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat<<EOF>>/tmp/part-include
|
||||||
|
part /boot --fstype=ext4 --asprimary --size=500 --ondrive=$(get_disk $rootfs_device) --fsoptions="$ROOTFS_OPTIONS"
|
||||||
|
part / --fstype=ext4 --asprimary --size=$ROOTFS_SIZE --ondrive=$(get_disk $rootfs_device) --fsoptions="$ROOTFS_OPTIONS"
|
||||||
|
part /var/log --fstype=ext4 --size=$LOG_VOL_SIZE --ondrive=$(get_disk $rootfs_device)
|
||||||
|
part /scratch --fstype=ext4 --size=$SCRATCH_VOL_SIZE --ondrive=$(get_disk $rootfs_device)
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
%end
|
||||||
|
|
34
bsp-files/kickstarts/pre_disk_controller.cfg
Executable file
34
bsp-files/kickstarts/pre_disk_controller.cfg
Executable file
@ -0,0 +1,34 @@
|
|||||||
|
|
||||||
|
## NOTE: updates to partition sizes need to be also reflected in
|
||||||
|
## _controller_filesystem_limits() in sysinv/api/controllers/v1/istorconfig.py
|
||||||
|
|
||||||
|
sz=$(blockdev --getsize64 $(get_disk $rootfs_device))
|
||||||
|
if [ $sz -le $((60*$gb)) ] ; then
|
||||||
|
LOG_VOL_SIZE=4000
|
||||||
|
SCRATCH_VOL_SIZE=4000
|
||||||
|
ROOTFS_SIZE=10000
|
||||||
|
else
|
||||||
|
LOG_VOL_SIZE=8000
|
||||||
|
SCRATCH_VOL_SIZE=8000
|
||||||
|
ROOTFS_SIZE=20000
|
||||||
|
fi
|
||||||
|
|
||||||
|
ROOTFS_OPTIONS="defaults"
|
||||||
|
profile_mode=`cat /proc/cmdline |xargs -n1 echo |grep security_profile= | grep extended`
|
||||||
|
if [ -n "$profile_mode" ]; then
|
||||||
|
# Enable iversion labelling for rootfs when IMA is enabled
|
||||||
|
ROOTFS_OPTIONS="${ROOTFS_OPTIONS},iversion"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat<<EOF>>/tmp/part-include
|
||||||
|
part /boot --fstype=ext4 --asprimary --size=500 --ondrive=$(get_disk $rootfs_device) --fsoptions="$ROOTFS_OPTIONS"
|
||||||
|
part pv.253004 --grow --asprimary --size=500 --ondrive=$(get_disk $rootfs_device)
|
||||||
|
volgroup cgts-vg --pesize=32768 pv.253004
|
||||||
|
logvol /var/log --fstype=ext4 --vgname=cgts-vg --size=$LOG_VOL_SIZE --name=log-lv
|
||||||
|
logvol /scratch --fstype=ext4 --vgname=cgts-vg --size=$SCRATCH_VOL_SIZE --name=scratch-lv
|
||||||
|
part / --fstype=ext4 --asprimary --size=$ROOTFS_SIZE --ondrive=$(get_disk $rootfs_device) --fsoptions="$ROOTFS_OPTIONS"
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
%end
|
||||||
|
|
154
bsp-files/kickstarts/pre_disk_setup_common.cfg
Normal file
154
bsp-files/kickstarts/pre_disk_setup_common.cfg
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
%pre --erroronfail
|
||||||
|
|
||||||
|
# Source common functions
|
||||||
|
. /tmp/ks-functions.sh
|
||||||
|
|
||||||
|
# This is a really fancy way of finding the first usable disk for the
|
||||||
|
# install and not stomping on the USB device if it comes up first
|
||||||
|
|
||||||
|
# First, parse /proc/cmdline to find the boot args
|
||||||
|
set -- `cat /proc/cmdline`
|
||||||
|
for I in $*; do case "$I" in *=*) eval $I 2>/dev/null;; esac; done
|
||||||
|
|
||||||
|
# Find either the ISO or USB device first chopping off partition
|
||||||
|
ISO_DEV=`readlink /dev/disk/by-label/oe_iso_boot`
|
||||||
|
sdev=`echo $ISO_DEV | sed -e 's/.$//'`
|
||||||
|
if [ -e /dev/disk/by-label/$sdev ] ; then
|
||||||
|
ISO_DEV=$sdev
|
||||||
|
fi
|
||||||
|
USB_DEV=`readlink /dev/disk/by-label/wr_usb_boot`
|
||||||
|
sdev=`echo $USB_DEV | sed -e 's/.$//'`
|
||||||
|
if [ -e /dev/disk/by-label/$sdev ] ; then
|
||||||
|
USB_DEV=$sdev
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Temporary, until lab pxelinux.cfg files are updated to specify install devices
|
||||||
|
if [ -z "$rootfs_device" -o -z "$boot_device" ]
|
||||||
|
then
|
||||||
|
INST_HDD=""
|
||||||
|
# Prefer a vd* device if this is kvm/qemu
|
||||||
|
for e in vda vdb sda sdb nvme0n1; do
|
||||||
|
if [ -e /dev/$e -a "$ISO_DEV" != "../../$e" -a "$USB_DEV" != "../../$e" ] ; then
|
||||||
|
INST_HDD=$e
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Set variables to $INST_HDD if not set
|
||||||
|
rootfs_device=${rootfs_device:-$INST_HDD}
|
||||||
|
boot_device=${boot_device:-$INST_HDD}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Convert to by-path
|
||||||
|
orig_rootfs_device=$rootfs_device
|
||||||
|
rootfs_device=$(get_by_path $rootfs_device)
|
||||||
|
|
||||||
|
orig_boot_device=$boot_device
|
||||||
|
boot_device=$(get_by_path $boot_device)
|
||||||
|
|
||||||
|
if [ ! -e "$rootfs_device" -o ! -e "$boot_device" ] ; then
|
||||||
|
# Touch this file to prevent Anaconda from dying an ungraceful death
|
||||||
|
touch /tmp/part-include
|
||||||
|
|
||||||
|
report_pre_failure_with_msg "ERROR: Specified installation ($orig_rootfs_device) or boot ($orig_boot_device) device is invalid."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Ensure specified device is not a USB drive
|
||||||
|
udevadm info --query=property --name=$rootfs_device |grep -q '^ID_BUS=usb' || \
|
||||||
|
udevadm info --query=property --name=$boot_device |grep -q '^ID_BUS=usb'
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
# Touch this file to prevent Anaconda from dying an ungraceful death
|
||||||
|
touch /tmp/part-include
|
||||||
|
|
||||||
|
report_pre_failure_with_msg "ERROR: Specified installation ($orig_rootfs_device) or boot ($orig_boot_device) device is a USB drive."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Deactivate existing volume groups to avoid Anaconda issues with pre-existing groups
|
||||||
|
vgs --noheadings -o vg_name | xargs --no-run-if-empty -n 1 vgchange -an
|
||||||
|
|
||||||
|
ONLYUSE_HDD=""
|
||||||
|
if [ "$(curl -sf http://pxecontroller:6385/v1/upgrade/$(hostname)/in_upgrade 2>/dev/null)" = "true" ]; then
|
||||||
|
# In an upgrade, only wipe the disk with the rootfs and boot partition
|
||||||
|
echo "In upgrade, wiping only $rootfs_device"
|
||||||
|
WIPE_HDD="$(get_disk $rootfs_device)"
|
||||||
|
ONLYUSE_HDD="$(basename $(get_disk $rootfs_device))"
|
||||||
|
if [ "$(get_disk $rootfs_device)" != "$(get_disk $boot_device)" ]; then
|
||||||
|
WIPE_HDD="$WIPE_HDD,$(get_disk $boot_device)"
|
||||||
|
ONLYUSE_HDD="$ONLYUSE_HDD,$(basename $(get_disk $boot_device))"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Make a list of all the hard drives that are to be wiped
|
||||||
|
WIPE_HDD=""
|
||||||
|
for f in /dev/disk/by-path/*
|
||||||
|
do
|
||||||
|
dev=$(readlink -f $f)
|
||||||
|
lsblk --nodeps --pairs $dev | grep -q 'TYPE="disk"'
|
||||||
|
if [ $? -ne 0 ]
|
||||||
|
then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Avoid wiping USB drives
|
||||||
|
udevadm info --query=property --name=$dev |grep -q '^ID_BUS=usb' && continue
|
||||||
|
|
||||||
|
devname=$(basename $dev)
|
||||||
|
if [ -e $dev -a "$ISO_DEV" != "../../$devname" -a "$USB_DEV" != "../../$devname" ] ; then
|
||||||
|
if [ -n "$WIPE_HDD" ] ; then
|
||||||
|
WIPE_HDD=$WIPE_HDD,$dev
|
||||||
|
else
|
||||||
|
WIPE_HDD=$dev
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo "Not in upgrade, wiping all disks: $WIPE_HDD"
|
||||||
|
fi
|
||||||
|
|
||||||
|
for dev in ${WIPE_HDD//,/ }
|
||||||
|
do
|
||||||
|
# Clearing previous GPT tables or LVM data
|
||||||
|
# Delete the first few bytes at the start and end of the partition. This is required with
|
||||||
|
# GPT partitions, they save partition info at the start and the end of the block.
|
||||||
|
# Do this for each partition on the disk, as well.
|
||||||
|
partitions=$(lsblk -rip $dev -o TYPE,NAME |awk '$1 == "part" {print $2}')
|
||||||
|
for p in $partitions $dev
|
||||||
|
do
|
||||||
|
echo "Pre-wiping $p from kickstart"
|
||||||
|
dd if=/dev/zero of=$p bs=512 count=34
|
||||||
|
dd if=/dev/zero of=$p bs=512 count=34 seek=$((`blockdev --getsz $p` - 34))
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
# Check for remaining cgts-vg PVs, which could potentially happen
|
||||||
|
# in an upgrade where we're not wiping all disks.
|
||||||
|
# If we ever create other volume groups from kickstart in the future,
|
||||||
|
# include them in this search as well.
|
||||||
|
partitions=$(pvs --select 'vg_name=cgts-vg' -o pv_name --noheading | grep -v '\[unknown\]')
|
||||||
|
for p in $partitions
|
||||||
|
do
|
||||||
|
echo "Pre-wiping $p from kickstart (cgts-vg present)"
|
||||||
|
dd if=/dev/zero of=$p bs=512 count=34
|
||||||
|
dd if=/dev/zero of=$p bs=512 count=34 seek=$((`blockdev --getsz $p` - 34))
|
||||||
|
done
|
||||||
|
|
||||||
|
let -i gb=1024*1024*1024
|
||||||
|
|
||||||
|
cat<<EOF>/tmp/part-include
|
||||||
|
clearpart --all --drives=$WIPE_HDD --initlabel
|
||||||
|
EOF
|
||||||
|
|
||||||
|
if [ -n "$ONLYUSE_HDD" ]; then
|
||||||
|
cat<<EOF>>/tmp/part-include
|
||||||
|
ignoredisk --only-use=$ONLYUSE_HDD
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -d /sys/firmware/efi ] ; then
|
||||||
|
cat<<EOF>>/tmp/part-include
|
||||||
|
part /boot/efi --fstype=efi --size=300 --ondrive=$(get_disk $boot_device)
|
||||||
|
EOF
|
||||||
|
else
|
||||||
|
cat<<EOF>>/tmp/part-include
|
||||||
|
part biosboot --asprimary --fstype=biosboot --size=1 --ondrive=$(get_disk $boot_device)
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
31
bsp-files/kickstarts/pre_disk_storage.cfg
Executable file
31
bsp-files/kickstarts/pre_disk_storage.cfg
Executable file
@ -0,0 +1,31 @@
|
|||||||
|
|
||||||
|
sz=$(blockdev --getsize64 $(get_disk $rootfs_device))
|
||||||
|
if [ $sz -le $((60*$gb)) ] ; then
|
||||||
|
LOG_VOL_SIZE=4000
|
||||||
|
SCRATCH_VOL_SIZE=4000
|
||||||
|
ROOTFS_SIZE=10000
|
||||||
|
else
|
||||||
|
LOG_VOL_SIZE=8000
|
||||||
|
SCRATCH_VOL_SIZE=8000
|
||||||
|
ROOTFS_SIZE=20000
|
||||||
|
fi
|
||||||
|
|
||||||
|
ROOTFS_OPTIONS="defaults"
|
||||||
|
profile_mode=`cat /proc/cmdline |xargs -n1 echo |grep security_profile= | grep extended`
|
||||||
|
if [ -n "$profile_mode" ]; then
|
||||||
|
# Enable iversion labelling for rootfs when IMA is enabled
|
||||||
|
ROOTFS_OPTIONS="${ROOTFS_OPTIONS},iversion"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat<<EOF>>/tmp/part-include
|
||||||
|
part /boot --fstype=ext4 --asprimary --size=500 --ondrive=$(get_disk $rootfs_device) --fsoptions="$ROOTFS_OPTIONS"
|
||||||
|
part pv.253004 --grow --asprimary --size=500 --ondrive=$(get_disk $rootfs_device)
|
||||||
|
volgroup cgts-vg --pesize=32768 pv.253004
|
||||||
|
logvol /var/log --fstype=ext4 --vgname=cgts-vg --size=$LOG_VOL_SIZE --name=log-lv
|
||||||
|
logvol /scratch --fstype=ext4 --vgname=cgts-vg --size=$SCRATCH_VOL_SIZE --name=scratch-lv
|
||||||
|
part / --fstype=ext4 --asprimary --size=$ROOTFS_SIZE --ondrive=$(get_disk $rootfs_device) --fsoptions="$ROOTFS_OPTIONS"
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
%end
|
||||||
|
|
6
bsp-files/kickstarts/pre_pkglist.cfg
Normal file
6
bsp-files/kickstarts/pre_pkglist.cfg
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
%packages
|
||||||
|
@core
|
||||||
|
@base
|
||||||
|
xxxPACKAGE_LISTxxx
|
||||||
|
%end
|
||||||
|
|
8
bsp-files/kickstarts/pre_pkglist_lowlatency.cfg
Normal file
8
bsp-files/kickstarts/pre_pkglist_lowlatency.cfg
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
%packages
|
||||||
|
@core
|
||||||
|
@base
|
||||||
|
-kernel
|
||||||
|
-kernel-tools
|
||||||
|
xxxPACKAGE_LISTxxx
|
||||||
|
%end
|
||||||
|
|
34
bsp-files/pkg-list.pl
Executable file
34
bsp-files/pkg-list.pl
Executable file
@ -0,0 +1,34 @@
|
|||||||
|
#!/usr/bin/perl
|
||||||
|
use strict;
|
||||||
|
|
||||||
|
#my $file_in = `ls -tr bitbake_build/tmp/work/*/*/*/installed_pkgs.txt |tail -1`;
|
||||||
|
my $file_in = `ls -tr bitbake_build/tmp/work/intel_x86_64-wrs-linux/wrlinux-image-cgcs-base/*/installed_pkgs.txt |tail -1`;
|
||||||
|
$file_in = $ARGV[0] if ($ARGV[0] ne "");
|
||||||
|
|
||||||
|
open(FILES_IN, $file_in) || die "Could not open list of files";
|
||||||
|
|
||||||
|
my %pkgs;
|
||||||
|
while (<FILES_IN>) {
|
||||||
|
chop;
|
||||||
|
my @v = split();
|
||||||
|
my $pkg = $v[0];
|
||||||
|
my $arch = $v[1];
|
||||||
|
# Fix up any lib32 packages
|
||||||
|
if ($pkg =~ /lib32-(.*)$/) {
|
||||||
|
$pkg = "$1";
|
||||||
|
$arch = "lib32_x86";
|
||||||
|
}
|
||||||
|
$pkgs{"$pkg.$arch"} = "1";
|
||||||
|
}
|
||||||
|
close(FILES_IN);
|
||||||
|
|
||||||
|
# Print all packages in sorted unique order with architecture
|
||||||
|
foreach (sort keys %pkgs) {
|
||||||
|
if (/(.*)\.(.*)/) {
|
||||||
|
my $pkg = $1;
|
||||||
|
my $arch = $2;
|
||||||
|
print "$pkg $arch\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exit 0;
|
137
bsp-files/platform_comps.py
Normal file
137
bsp-files/platform_comps.py
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
"""
|
||||||
|
Copyright (c) 2018 Wind River Systems, Inc.
|
||||||
|
|
||||||
|
SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
import getopt
|
||||||
|
import os
|
||||||
|
import platform
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
import xml.etree.ElementTree as ElementTree
|
||||||
|
|
||||||
|
def usage():
|
||||||
|
print "Usage: %s --groups <groups.xml> --pkgdir <pkgdir>" \
|
||||||
|
% os.path.basename(sys.argv[0])
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
def add_text_tag_to_xml(parent,
|
||||||
|
name,
|
||||||
|
text):
|
||||||
|
"""
|
||||||
|
Utility function for adding a text tag to an XML object
|
||||||
|
:param parent: Parent element
|
||||||
|
:param name: Element name
|
||||||
|
:param text: Text value
|
||||||
|
:return:The created element
|
||||||
|
"""
|
||||||
|
tag = ElementTree.SubElement(parent, name)
|
||||||
|
tag.text = text
|
||||||
|
tag.tail = '\n '
|
||||||
|
return tag
|
||||||
|
|
||||||
|
|
||||||
|
def add_group(comps, personality, rpmlist=None, filter_dir=None, filter=None):
|
||||||
|
"""
|
||||||
|
Add a software group to the comps.xml
|
||||||
|
:param comps: comps element
|
||||||
|
:param personality: Personality of node for group
|
||||||
|
:param rpmlist: List of all rpms in the base load
|
||||||
|
:param filter_dir: Path to filter files
|
||||||
|
:param filter: Name of filter file to use
|
||||||
|
"""
|
||||||
|
|
||||||
|
if rpmlist is not None:
|
||||||
|
# Define a base platform group
|
||||||
|
groupname = "platform-%s" % personality
|
||||||
|
desc = "Platform packages for %s" % personality
|
||||||
|
else:
|
||||||
|
# Define an empty patch group
|
||||||
|
groupname = "updates-%s" % personality
|
||||||
|
desc = "Patches for %s" % personality
|
||||||
|
|
||||||
|
group = ElementTree.SubElement(comps, 'group')
|
||||||
|
group.tail = '\n'
|
||||||
|
|
||||||
|
add_text_tag_to_xml(group, 'id', groupname)
|
||||||
|
add_text_tag_to_xml(group, 'default', "false")
|
||||||
|
add_text_tag_to_xml(group, 'uservisible', "true")
|
||||||
|
add_text_tag_to_xml(group, 'display_order', "1024")
|
||||||
|
add_text_tag_to_xml(group, 'name', groupname)
|
||||||
|
add_text_tag_to_xml(group, 'description', desc)
|
||||||
|
|
||||||
|
package_element = ElementTree.SubElement(group,
|
||||||
|
'packagelist')
|
||||||
|
package_element.tail = '\n '
|
||||||
|
|
||||||
|
if rpmlist is not None:
|
||||||
|
# Read the filter file
|
||||||
|
f = open(os.path.join(filter_dir, filter), 'r')
|
||||||
|
filtered = f.read().split()
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
for pkg in sorted(rpmlist):
|
||||||
|
if pkg not in filtered:
|
||||||
|
tag = ElementTree.SubElement(package_element,
|
||||||
|
'packagereq',
|
||||||
|
type="mandatory")
|
||||||
|
tag.text = pkg
|
||||||
|
tag.tail = '\n '
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
try:
|
||||||
|
opts, remainder = getopt.getopt(sys.argv[1:],
|
||||||
|
'',
|
||||||
|
['pkgdir=',
|
||||||
|
'groups='])
|
||||||
|
except getopt.GetoptError:
|
||||||
|
usage()
|
||||||
|
|
||||||
|
pkgdir = None
|
||||||
|
groups_file = None
|
||||||
|
|
||||||
|
# Filters are colocated with this script
|
||||||
|
filter_dir = os.path.dirname(sys.argv[0])
|
||||||
|
|
||||||
|
for opt, arg in opts:
|
||||||
|
if opt == "--pkgdir":
|
||||||
|
pkgdir = arg
|
||||||
|
elif opt == "--groups":
|
||||||
|
groups_file = arg
|
||||||
|
|
||||||
|
if pkgdir is None or groups_file is None:
|
||||||
|
usage()
|
||||||
|
|
||||||
|
# Get the pkglist
|
||||||
|
cmd = "find %s -name '*.rpm' | xargs rpm -qp --queryformat '%%{NAME}\n'" % pkgdir
|
||||||
|
rpmlist = subprocess.check_output(cmd, shell=True).split()
|
||||||
|
|
||||||
|
tree = ElementTree.parse(groups_file)
|
||||||
|
comps = tree.getroot()
|
||||||
|
comps.tail = '\n'
|
||||||
|
|
||||||
|
add_group(comps, 'controller', rpmlist, filter_dir, 'filter_out_from_controller')
|
||||||
|
add_group(comps, 'controller-compute', rpmlist, filter_dir, 'filter_out_from_smallsystem')
|
||||||
|
add_group(comps, 'controller-compute-lowlatency', rpmlist, filter_dir, 'filter_out_from_smallsystem_lowlatency')
|
||||||
|
add_group(comps, 'compute', rpmlist, filter_dir, 'filter_out_from_compute')
|
||||||
|
add_group(comps, 'compute-lowlatency', rpmlist, filter_dir, 'filter_out_from_compute_lowlatency')
|
||||||
|
add_group(comps, 'storage', rpmlist, filter_dir, 'filter_out_from_storage')
|
||||||
|
|
||||||
|
add_group(comps, 'controller')
|
||||||
|
add_group(comps, 'controller-compute')
|
||||||
|
add_group(comps, 'controller-compute-lowlatency')
|
||||||
|
add_group(comps, 'compute')
|
||||||
|
add_group(comps, 'compute-lowlatency')
|
||||||
|
add_group(comps, 'storage')
|
||||||
|
|
||||||
|
tree.write(groups_file, encoding="UTF-8")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
180
bsp-files/pxeboot.cfg
Normal file
180
bsp-files/pxeboot.cfg
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
SERIAL 0 115200
|
||||||
|
TIMEOUT 100
|
||||||
|
DEFAULT menu.c32
|
||||||
|
|
||||||
|
# Menu Configuration
|
||||||
|
MENU WIDTH 80
|
||||||
|
MENU MARGIN 10
|
||||||
|
MENU PASSWORDMARGIN 3
|
||||||
|
MENU ROWS 12
|
||||||
|
MENU TABMSGROW 18
|
||||||
|
MENU CMDLINEROW 18
|
||||||
|
MENU ENDROW 24
|
||||||
|
MENU PASSWORDROW 11
|
||||||
|
MENU TIMEOUTROW 20
|
||||||
|
|
||||||
|
PROMPT 0
|
||||||
|
NOESCAPE 1
|
||||||
|
NOCOMPLETE 1
|
||||||
|
ALLOWOPTIONS 0
|
||||||
|
|
||||||
|
label 0
|
||||||
|
menu label ^1) Boot from hard drive
|
||||||
|
COM32 chain.c32
|
||||||
|
APPEND hd0
|
||||||
|
|
||||||
|
# Standard Controller menu
|
||||||
|
menu begin
|
||||||
|
menu title Standard Controller Configuration
|
||||||
|
# Serial Console submenu
|
||||||
|
menu begin
|
||||||
|
menu title Serial Console
|
||||||
|
label 1
|
||||||
|
menu label STANDARD Security Boot Profile
|
||||||
|
text help
|
||||||
|
Standard Controller, console=ttyS0
|
||||||
|
Standard Security Profile Enabled (default setting)
|
||||||
|
endtext
|
||||||
|
kernel vmlinuz
|
||||||
|
append initrd=initrd.img bootifonly=1 devfs=nomount inst.repo=xxxHTTP_URLxxx inst.ks=xxxHTTP_URLxxx/pxeboot_controller.cfg boot_device=sda rootfs_device=sda biosdevname=0 inst.text serial console=ttyS0,115200n8 inst.gpt security_profile=standard
|
||||||
|
ipappend 2
|
||||||
|
|
||||||
|
label S1
|
||||||
|
menu label EXTENDED Security Boot Profile
|
||||||
|
text help
|
||||||
|
Standard Controller, console=ttyS0
|
||||||
|
Extended Security Profile Enabled (will impact performance)
|
||||||
|
endtext
|
||||||
|
kernel vmlinuz
|
||||||
|
append initrd=initrd.img bootifonly=1 devfs=nomount inst.repo=xxxHTTP_URLxxx inst.ks=xxxHTTP_URLxxx/pxeboot_controller.cfg boot_device=sda rootfs_device=sda biosdevname=0 inst.text serial console=ttyS0,115200n8 inst.gpt security_profile=extended
|
||||||
|
ipappend 2
|
||||||
|
menu end
|
||||||
|
|
||||||
|
# Graphical Console submenu
|
||||||
|
menu begin
|
||||||
|
menu title Graphical Console
|
||||||
|
label 2
|
||||||
|
menu label STANDARD Security Boot Profile
|
||||||
|
text help
|
||||||
|
Standard Controller, console=tty0
|
||||||
|
Standard Security Profile Enabled (default setting)
|
||||||
|
endtext
|
||||||
|
kernel vmlinuz
|
||||||
|
append initrd=initrd.img bootifonly=1 devfs=nomount inst.repo=xxxHTTP_URLxxx inst.ks=xxxHTTP_URLxxx/pxeboot_controller.cfg boot_device=sda rootfs_device=sda biosdevname=0 inst.text console=tty0 inst.gpt security_profile=standard
|
||||||
|
ipappend 2
|
||||||
|
|
||||||
|
label S2
|
||||||
|
menu label EXTENDED Security Boot Profile
|
||||||
|
text help
|
||||||
|
Standard Controller, console=tty0
|
||||||
|
Extended Security Profile Enabled (will impact performance)
|
||||||
|
endtext
|
||||||
|
kernel vmlinuz
|
||||||
|
append initrd=initrd.img bootifonly=1 devfs=nomount inst.repo=xxxHTTP_URLxxx inst.ks=xxxHTTP_URLxxx/pxeboot_controller.cfg boot_device=sda rootfs_device=sda biosdevname=0 inst.text console=tty0 inst.gpt security_profile=extended
|
||||||
|
ipappend 2
|
||||||
|
menu end
|
||||||
|
menu end
|
||||||
|
|
||||||
|
# AIO Controller menu
|
||||||
|
menu begin
|
||||||
|
menu title All-in-one Controller Configuration
|
||||||
|
# Serial Console submenu
|
||||||
|
menu begin
|
||||||
|
menu title Serial Console
|
||||||
|
label 3
|
||||||
|
menu label STANDARD Security Boot Profile
|
||||||
|
text help
|
||||||
|
All-in-one Controller, console=ttyS0
|
||||||
|
Standard Security Profile Enabled (default setting)
|
||||||
|
endtext
|
||||||
|
kernel vmlinuz
|
||||||
|
append initrd=initrd.img bootifonly=1 devfs=nomount inst.repo=xxxHTTP_URLxxx inst.ks=xxxHTTP_URLxxx/pxeboot_smallsystem.cfg boot_device=sda rootfs_device=sda biosdevname=0 inst.text serial console=ttyS0,115200n8 inst.gpt security_profile=standard
|
||||||
|
ipappend 2
|
||||||
|
|
||||||
|
label S3
|
||||||
|
menu label EXTENDED Security Boot Profile
|
||||||
|
text help
|
||||||
|
All-in-one Controller, console=ttyS0
|
||||||
|
Extended Security Profile Enabled (will impact performance)
|
||||||
|
endtext
|
||||||
|
kernel vmlinuz
|
||||||
|
append initrd=initrd.img bootifonly=1 devfs=nomount inst.repo=xxxHTTP_URLxxx inst.ks=xxxHTTP_URLxxx/pxeboot_smallsystem.cfg boot_device=sda rootfs_device=sda biosdevname=0 inst.text serial console=ttyS0,115200n8 inst.gpt security_profile=extended
|
||||||
|
ipappend 2
|
||||||
|
menu end
|
||||||
|
|
||||||
|
# Graphical Console submenu
|
||||||
|
menu begin
|
||||||
|
menu title Graphical Console
|
||||||
|
label 4
|
||||||
|
menu label STANDARD Security Boot Profile
|
||||||
|
text help
|
||||||
|
All-in-one Controller, console=tty0
|
||||||
|
Standard Security Profile Enabled (default setting)
|
||||||
|
endtext
|
||||||
|
kernel vmlinuz
|
||||||
|
append initrd=initrd.img bootifonly=1 devfs=nomount inst.repo=xxxHTTP_URLxxx inst.ks=xxxHTTP_URLxxx/pxeboot_smallsystem.cfg boot_device=sda rootfs_device=sda biosdevname=0 inst.text console=tty0 inst.gpt security_profile=standard
|
||||||
|
ipappend 2
|
||||||
|
|
||||||
|
label S4
|
||||||
|
menu label EXTENDED Security Boot Profile
|
||||||
|
text help
|
||||||
|
All-in-one Controller, console=tty0
|
||||||
|
Extended Security Profile Enabled (will impact performance)
|
||||||
|
endtext
|
||||||
|
kernel vmlinuz
|
||||||
|
append initrd=initrd.img bootifonly=1 devfs=nomount inst.repo=xxxHTTP_URLxxx inst.ks=xxxHTTP_URLxxx/pxeboot_smallsystem.cfg boot_device=sda rootfs_device=sda biosdevname=0 inst.text console=tty0 inst.gpt security_profile=extended
|
||||||
|
ipappend 2
|
||||||
|
menu end
|
||||||
|
menu end
|
||||||
|
|
||||||
|
# AIO (Low Latency) Controller menu
|
||||||
|
menu begin
|
||||||
|
menu title All-in-one (lowlatency) Controller Configuration
|
||||||
|
# Serial Console submenu
|
||||||
|
menu begin
|
||||||
|
menu title Serial Console
|
||||||
|
label 5
|
||||||
|
menu label STANDARD Security Boot Profile
|
||||||
|
text help
|
||||||
|
All-in-one (lowlatency) Controller, console=ttyS0
|
||||||
|
Standard Security Profile Enabled (default setting)
|
||||||
|
endtext
|
||||||
|
kernel vmlinuz
|
||||||
|
append initrd=initrd.img bootifonly=1 devfs=nomount inst.repo=xxxHTTP_URLxxx inst.ks=xxxHTTP_URLxxx/pxeboot_smallsystem_lowlatency.cfg boot_device=sda rootfs_device=sda biosdevname=0 inst.text console=ttyS0,115200n8 inst.gpt security_profile=standard
|
||||||
|
ipappend 2
|
||||||
|
|
||||||
|
label S5
|
||||||
|
menu label EXTENDED Security Boot Profile
|
||||||
|
text help
|
||||||
|
All-in-one (lowlatency) Controller, console=ttyS0
|
||||||
|
Extended Security Profile Enabled (will impact performance)
|
||||||
|
endtext
|
||||||
|
kernel vmlinuz
|
||||||
|
append initrd=initrd.img bootifonly=1 devfs=nomount inst.repo=xxxHTTP_URLxxx inst.ks=xxxHTTP_URLxxx/pxeboot_smallsystem_lowlatency.cfg boot_device=sda rootfs_device=sda biosdevname=0 inst.text console=ttyS0,115200n8 inst.gpt security_profile=extended
|
||||||
|
ipappend 2
|
||||||
|
menu end
|
||||||
|
|
||||||
|
# Graphical Console submenu
|
||||||
|
menu begin
|
||||||
|
menu title Graphical Console
|
||||||
|
label 6
|
||||||
|
menu label STANDARD Security Boot Profile
|
||||||
|
text help
|
||||||
|
All-in-one (lowlatency) Controller, console=tty0
|
||||||
|
Standard Security Profile Enabled (default setting)
|
||||||
|
endtext
|
||||||
|
kernel vmlinuz
|
||||||
|
append initrd=initrd.img bootifonly=1 devfs=nomount inst.repo=xxxHTTP_URLxxx inst.ks=xxxHTTP_URLxxx/pxeboot_smallsystem_lowlatency.cfg boot_device=sda rootfs_device=sda biosdevname=0 inst.text console=tty0 inst.gpt security_profile=standard
|
||||||
|
ipappend 2
|
||||||
|
|
||||||
|
label S6
|
||||||
|
menu label EXTENDED Security Boot Profile
|
||||||
|
text help
|
||||||
|
All-in-one (lowlatency) Controller, console=tty0
|
||||||
|
Extended Security Profile Enabled (will impact performance)
|
||||||
|
endtext
|
||||||
|
kernel vmlinuz
|
||||||
|
append initrd=initrd.img bootifonly=1 devfs=nomount inst.repo=xxxHTTP_URLxxx inst.ks=xxxHTTP_URLxxx/pxeboot_smallsystem_lowlatency.cfg boot_device=sda rootfs_device=sda biosdevname=0 inst.text console=tty0 inst.gpt security_profile=extended
|
||||||
|
ipappend 2
|
||||||
|
menu end
|
||||||
|
menu end
|
104
bsp-files/pxeboot_grub.cfg
Normal file
104
bsp-files/pxeboot_grub.cfg
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
timeout=10
|
||||||
|
default=0
|
||||||
|
|
||||||
|
GRUB_HIDDEN_TIMEOUT=0
|
||||||
|
GRUB_TIMEOUT_STYLE='countdown'
|
||||||
|
|
||||||
|
pxe_root=${root}
|
||||||
|
|
||||||
|
menuentry '1) UEFI Boot from hard drive' {
|
||||||
|
insmod part_gpt
|
||||||
|
insmod chain
|
||||||
|
# The EFI bootloader is located in /boot/efi/EFI/centos/
|
||||||
|
# /boot/efi being the mount
|
||||||
|
# /dev/sda1 307016 9680 297336 4% /boot/efi
|
||||||
|
set root=(hd0,gpt1)
|
||||||
|
chainloader /EFI/centos/grubx64.efi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Standard Controller menu
|
||||||
|
submenu 'UEFI Standard Controller' {
|
||||||
|
submenu 'Serial Console' {
|
||||||
|
menuentry 'STANDARD Security Boot Profile' {
|
||||||
|
set root=${pxe_root}
|
||||||
|
linuxefi vmlinuz bootifonly=1 devfs=nomount inst.repo=xxxHTTP_URLxxx inst.ks=xxxHTTP_URLxxx/pxeboot_controller.cfg ksdevice=$net_default_mac BOOTIF=$net_default_mac boot_device=sda rootfs_device=sda biosdevname=0 inst.text serial console=ttyS0,115200n8 inst.gpt security_profile=standard
|
||||||
|
initrdefi initrd.img
|
||||||
|
}
|
||||||
|
menuentry 'EXTENDED Security Boot Profile' {
|
||||||
|
set root=${pxe_root}
|
||||||
|
linuxefi vmlinuz bootifonly=1 devfs=nomount inst.repo=xxxHTTP_URLxxx inst.ks=xxxHTTP_URLxxx/pxeboot_controller.cfg ksdevice=$net_default_mac BOOTIF=$net_default_mac boot_device=sda rootfs_device=sda biosdevname=0 inst.text serial console=ttyS0,115200n8 inst.gpt security_profile=extended tboot=true
|
||||||
|
initrdefi initrd.img
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
submenu 'Graphical Console' {
|
||||||
|
menuentry 'STANDARD Security Boot Profile' {
|
||||||
|
set root=${pxe_root}
|
||||||
|
linuxefi vmlinuz bootifonly=1 devfs=nomount inst.repo=xxxHTTP_URLxxx inst.ks=xxxHTTP_URLxxx/pxeboot_controller.cfg ksdevice=$net_default_mac BOOTIF=$net_default_mac boot_device=sda rootfs_device=sda biosdevname=0 inst.text console=tty0 inst.gpt security_profile=standard
|
||||||
|
initrdefi initrd.img
|
||||||
|
}
|
||||||
|
menuentry 'EXTENDED Security Boot Profile' {
|
||||||
|
set root=${pxe_root}
|
||||||
|
linuxefi vmlinuz bootifonly=1 devfs=nomount inst.repo=xxxHTTP_URLxxx inst.ks=xxxHTTP_URLxxx/pxeboot_controller.cfg ksdevice=$net_default_mac BOOTIF=$net_default_mac boot_device=sda rootfs_device=sda biosdevname=0 inst.text console=tty0 inst.gpt security_profile=extended tboot=true
|
||||||
|
initrdefi initrd.img
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# AIO Controller menu
|
||||||
|
submenu 'UEFI All-in-one Controller' {
|
||||||
|
submenu 'Serial Console' {
|
||||||
|
menuentry 'STANDARD Security Boot Profile' {
|
||||||
|
set root=${pxe_root}
|
||||||
|
linuxefi vmlinuz bootifonly=1 devfs=nomount inst.repo=xxxHTTP_URLxxx inst.ks=xxxHTTP_URLxxx/pxeboot_smallsystem.cfg ksdevice=$net_default_mac BOOTIF=$net_default_mac boot_device=sda rootfs_device=sda biosdevname=0 inst.text serial console=ttyS0,115200n8 inst.gpt security_profile=standard
|
||||||
|
initrdefi initrd.img
|
||||||
|
}
|
||||||
|
menuentry 'EXTENDED Security Boot Profile' {
|
||||||
|
set root=${pxe_root}
|
||||||
|
linuxefi vmlinuz bootifonly=1 devfs=nomount inst.repo=xxxHTTP_URLxxx inst.ks=xxxHTTP_URLxxx/pxeboot_smallsystem.cfg ksdevice=$net_default_mac BOOTIF=$net_default_mac boot_device=sda rootfs_device=sda biosdevname=0 inst.text serial console=ttyS0,115200n8 inst.gpt security_profile=extended tboot=true
|
||||||
|
initrdefi initrd.img
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
submenu 'Graphical Console' {
|
||||||
|
menuentry 'STANDARD Security Boot Profile' {
|
||||||
|
set root=${pxe_root}
|
||||||
|
linuxefi vmlinuz bootifonly=1 devfs=nomount inst.repo=xxxHTTP_URLxxx inst.ks=xxxHTTP_URLxxx/pxeboot_smallsystem.cfg ksdevice=$net_default_mac BOOTIF=$net_default_mac boot_device=sda rootfs_device=sda biosdevname=0 inst.text console=tty0 inst.gpt security_profile=standard
|
||||||
|
initrdefi initrd.img
|
||||||
|
}
|
||||||
|
menuentry 'EXTENDED Security Boot Profile' {
|
||||||
|
set root=${pxe_root}
|
||||||
|
linuxefi vmlinuz bootifonly=1 devfs=nomount inst.repo=xxxHTTP_URLxxx inst.ks=xxxHTTP_URLxxx/pxeboot_smallsystem.cfg ksdevice=$net_default_mac BOOTIF=$net_default_mac boot_device=sda rootfs_device=sda biosdevname=0 inst.text console=tty0 inst.gpt security_profile=extended tboot=true
|
||||||
|
initrdefi initrd.img
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# AIO (lowlatency) Controller menu
|
||||||
|
submenu 'UEFI All-in-one (lowlatency) Controller' {
|
||||||
|
submenu 'Serial Console' {
|
||||||
|
menuentry 'STANDARD Security Boot Profile' {
|
||||||
|
set root=${pxe_root}
|
||||||
|
linuxefi vmlinuz bootifonly=1 devfs=nomount inst.repo=xxxHTTP_URLxxx inst.ks=xxxHTTP_URLxxx/pxeboot_smallsystem_lowlatency.cfg ksdevice=$net_default_mac BOOTIF=$net_default_mac boot_device=sda rootfs_device=sda biosdevname=0 inst.text serial console=ttyS0,115200n8 inst.gpt security_profile=standard
|
||||||
|
initrdefi initrd.img
|
||||||
|
}
|
||||||
|
menuentry 'EXTENDED Security Boot Profile' {
|
||||||
|
set root=${pxe_root}
|
||||||
|
linuxefi vmlinuz bootifonly=1 devfs=nomount inst.repo=xxxHTTP_URLxxx inst.ks=xxxHTTP_URLxxx/pxeboot_smallsystem_lowlatency.cfg ksdevice=$net_default_mac BOOTIF=$net_default_mac boot_device=sda rootfs_device=sda biosdevname=0 inst.text serial console=ttyS0,115200n8 inst.gpt security_profile=extended tboot=true
|
||||||
|
initrdefi initrd.img
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
submenu 'Graphical Console' {
|
||||||
|
menuentry 'STANDARD Security Boot Profile' {
|
||||||
|
set root=${pxe_root}
|
||||||
|
linuxefi vmlinuz bootifonly=1 devfs=nomount inst.repo=xxxHTTP_URLxxx inst.ks=xxxHTTP_URLxxx/pxeboot_smallsystem_lowlatency.cfg ksdevice=$net_default_mac BOOTIF=$net_default_mac boot_device=sda rootfs_device=sda biosdevname=0 inst.text console=tty0 inst.gpt security_profile=standard
|
||||||
|
initrdefi initrd.img
|
||||||
|
}
|
||||||
|
menuentry 'EXTENDED Security Boot Profile' {
|
||||||
|
set root=${pxe_root}
|
||||||
|
linuxefi vmlinuz bootifonly=1 devfs=nomount inst.repo=xxxHTTP_URLxxx inst.ks=xxxHTTP_URLxxx/pxeboot_smallsystem_lowlatency.cfg ksdevice=$net_default_mac BOOTIF=$net_default_mac boot_device=sda rootfs_device=sda biosdevname=0 inst.text console=tty0 inst.gpt security_profile=extended tboot=true
|
||||||
|
initrdefi initrd.img
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
111
bsp-files/pxeboot_setup.sh
Executable file
111
bsp-files/pxeboot_setup.sh
Executable file
@ -0,0 +1,111 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
OPTIND=1
|
||||||
|
|
||||||
|
BASE_URL=""
|
||||||
|
TFTP_DIR=""
|
||||||
|
WORKING_DIR=""
|
||||||
|
COPY_DIR=""
|
||||||
|
ISODIR=$(dirname `readlink -f $0`)
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
echo "Usage: $0 -u <http base URL> [-t <tftp pxeboot directory>] or [-w <working directory>]" 1>&2;
|
||||||
|
exit 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
while getopts ":u:t:w:" opt; do
|
||||||
|
case "$opt" in
|
||||||
|
u)
|
||||||
|
BASE_URL=${OPTARG}
|
||||||
|
;;
|
||||||
|
t)
|
||||||
|
TFTP_DIR=${OPTARG}
|
||||||
|
;;
|
||||||
|
w)
|
||||||
|
WORKING_DIR=${OPTARG}
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
usage
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
shift $((OPTIND-1))
|
||||||
|
|
||||||
|
if [ -z "$BASE_URL" ]; then
|
||||||
|
echo "HTTP base URL is required: -u <http base URL>"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$TFTP_DIR" ] && [ -z "$WORKING_DIR" ]; then
|
||||||
|
echo "Either tftp pxeboot directory or working directory has to be specified:"
|
||||||
|
echo "-t <tftp pxeboot directory> or -w <working directory>"
|
||||||
|
exit 0
|
||||||
|
elif [ -n "$TFTP_DIR" ]; then
|
||||||
|
if [ -n "$WORKING_DIR" ]; then
|
||||||
|
echo "tftp pxeboot directory is supplied, working directory will be ignored."
|
||||||
|
fi
|
||||||
|
COPY_DIR=$TFTP_DIR
|
||||||
|
elif [ -n "$WORKING_DIR" ]; then
|
||||||
|
COPY_DIR=$WORKING_DIR
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d ${COPY_DIR} ] ; then
|
||||||
|
if [ -w "$(dirname $COPY_DIR)" ]; then
|
||||||
|
echo "Create ${COPY_DIR}"
|
||||||
|
mkdir ${COPY_DIR}
|
||||||
|
chmod +w ${COPY_DIR}
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Can't create ${COPY_DIR}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "$COPY_DIR parent directory is not writeable."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "$COPY_DIR already exists"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
#Copy the vmlinuz and initrd files to the destination directory
|
||||||
|
cp ${ISODIR}/vmlinuz ${COPY_DIR}/
|
||||||
|
cp ${ISODIR}/initrd.img ${COPY_DIR}/
|
||||||
|
|
||||||
|
#Copy the contents of distribution to the destination directory
|
||||||
|
cp -r ${ISODIR}/* ${COPY_DIR}/
|
||||||
|
|
||||||
|
#Find the number of directories in the URL
|
||||||
|
dirpath=$(echo ${BASE_URL#"http://"})
|
||||||
|
DIRS=$(grep -o "/" <<< "$dirpath" | wc -l)
|
||||||
|
|
||||||
|
#Escape path for sed
|
||||||
|
BASE_URL="${BASE_URL//\//\\/}"
|
||||||
|
|
||||||
|
#Copy pxeboot files
|
||||||
|
mkdir -p ${COPY_DIR}/EFI/centos/x86_64-efi/
|
||||||
|
cp -Rf ${COPY_DIR}/pxeboot/* ${COPY_DIR}/
|
||||||
|
|
||||||
|
#Rename the UEFI grub config
|
||||||
|
mv ${COPY_DIR}/pxeboot_grub.cfg ${COPY_DIR}/grub.cfg
|
||||||
|
|
||||||
|
#Variable replacement
|
||||||
|
sed -i "s#xxxHTTP_URLxxx#${BASE_URL}#g;
|
||||||
|
s#xxxHTTP_URL_PATCHESxxx#${BASE_URL}/patches#g;
|
||||||
|
s#NUM_DIRS#${DIRS}#g" \
|
||||||
|
${COPY_DIR}/pxeboot.cfg \
|
||||||
|
${COPY_DIR}/grub.cfg \
|
||||||
|
${COPY_DIR}/pxeboot_controller.cfg \
|
||||||
|
${COPY_DIR}/pxeboot_smallsystem.cfg \
|
||||||
|
${COPY_DIR}/pxeboot_smallsystem_lowlatency.cfg
|
||||||
|
|
||||||
|
# Delete unnecessary files
|
||||||
|
rm -Rf ${COPY_DIR}/EFI/BOOT
|
||||||
|
rm -Rf ${COPY_DIR}/pxeboot
|
||||||
|
|
||||||
|
if [ -n "$TFTP_DIR" ]; then
|
||||||
|
#Create pxelinux.cfg directory and default link
|
||||||
|
mkdir ${TFTP_DIR}/pxelinux.cfg
|
||||||
|
chmod 755 ${TFTP_DIR}/pxelinux.cfg
|
||||||
|
ln -s ../pxeboot.cfg ${TFTP_DIR}/pxelinux.cfg/default
|
||||||
|
fi
|
64
bsp-files/upgrades/import.sh
Normal file
64
bsp-files/upgrades/import.sh
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Copyright (c) 2015-2017 Wind River Systems, Inc.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
|
# This script is run during the load-import command
|
||||||
|
# It is used to copy the required files from the iso to the
|
||||||
|
# controller.
|
||||||
|
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
exec 2>>/var/log/load-import.log
|
||||||
|
set -x
|
||||||
|
echo "$(date): Starting execution: $0 $@"
|
||||||
|
|
||||||
|
cleanup() {
|
||||||
|
rm -rf $TMP_RPM
|
||||||
|
}
|
||||||
|
rollback() {
|
||||||
|
rm -rf $FEED_DIR
|
||||||
|
}
|
||||||
|
|
||||||
|
error() {
|
||||||
|
local parent_lineno="$1"
|
||||||
|
local err_code="${2}"
|
||||||
|
echo "Error executing import script at line: ${parent_lineno} with error code: ${err_code}"
|
||||||
|
rollback
|
||||||
|
exit "${err_code}"
|
||||||
|
}
|
||||||
|
|
||||||
|
trap 'error ${LINENO} $?' ERR
|
||||||
|
trap cleanup 0
|
||||||
|
|
||||||
|
SCRIPT_DIR=$(dirname $0)
|
||||||
|
ISO_DIR=$(dirname $SCRIPT_DIR)
|
||||||
|
|
||||||
|
source $SCRIPT_DIR/version
|
||||||
|
source /etc/build.info
|
||||||
|
|
||||||
|
FEED_DIR=/www/pages/feed/rel-$VERSION
|
||||||
|
CURRENT_FEED_DIR=/www/pages/feed/rel-$SW_VERSION
|
||||||
|
TMP_RPM=/tmp/cpio
|
||||||
|
|
||||||
|
rm -rf $TMP_RPM
|
||||||
|
rm -rf $FEED_DIR
|
||||||
|
|
||||||
|
mkdir -p $FEED_DIR
|
||||||
|
|
||||||
|
cp -rp $ISO_DIR/Packages $ISO_DIR/repodata $ISO_DIR/LiveOS $FEED_DIR/
|
||||||
|
|
||||||
|
cp -p $CURRENT_FEED_DIR/install_uuid $FEED_DIR/
|
||||||
|
|
||||||
|
if [ -d $ISO_DIR/patches ]; then
|
||||||
|
mkdir -p /www/pages/updates/rel-${VERSION}
|
||||||
|
cp -r ${ISO_DIR}/patches/Packages ${ISO_DIR}/patches/repodata /www/pages/updates/rel-${VERSION}/
|
||||||
|
rsync -ac ${ISO_DIR}/patches/metadata/ /opt/patching/metadata/
|
||||||
|
mkdir -p /opt/patching/packages/${VERSION}
|
||||||
|
|
||||||
|
find /www/pages/updates/rel-${VERSION}/Packages -name '*.rpm' \
|
||||||
|
| xargs --no-run-if-empty -I files cp --preserve=all files /opt/patching/packages/${VERSION}/
|
||||||
|
fi
|
||||||
|
|
24
bsp-files/upgrades/metadata.xml
Normal file
24
bsp-files/upgrades/metadata.xml
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<build>
|
||||||
|
<version>xxxSW_VERSIONxxx</version>
|
||||||
|
<supported_upgrades>
|
||||||
|
<upgrade>
|
||||||
|
<version>17.06</version>
|
||||||
|
<required_patch>TC_17.06_PATCH_0001</required_patch>
|
||||||
|
<required_patch>TC_17.06_PATCH_0002</required_patch>
|
||||||
|
<required_patch>TC_17.06_PATCH_0003</required_patch>
|
||||||
|
<required_patch>TC_17.06_PATCH_0004</required_patch>
|
||||||
|
<required_patch>TC_17.06_PATCH_0005</required_patch>
|
||||||
|
<required_patch>TC_17.06_PATCH_0006</required_patch>
|
||||||
|
<required_patch>TC_17.06_PATCH_0007</required_patch>
|
||||||
|
<required_patch>TC_17.06_PATCH_0008</required_patch>
|
||||||
|
<required_patch>TC_17.06_PATCH_0009</required_patch>
|
||||||
|
<required_patch>TC_17.06_PATCH_0010</required_patch>
|
||||||
|
<required_patch>TC_17.06_PATCH_0011</required_patch>
|
||||||
|
<required_patch>TC_17.06_PATCH_0012</required_patch>
|
||||||
|
<required_patch>TC_17.06_PATCH_0013</required_patch>
|
||||||
|
<required_patch>TC_17.06_PATCH_0014</required_patch>
|
||||||
|
<required_patch>TC_17.06_PATCH_0015</required_patch>
|
||||||
|
</upgrade>
|
||||||
|
</supported_upgrades>
|
||||||
|
</build>
|
254
installer/initrd/README
Normal file
254
installer/initrd/README
Normal file
@ -0,0 +1,254 @@
|
|||||||
|
There are three prebuilt files that we can update when we need to make changes
|
||||||
|
to the installer:
|
||||||
|
- vmlinuz - The kernel
|
||||||
|
- initrd.img - Initial initrd loaded when the installer boots. Has kernel
|
||||||
|
modules, etc, and loads the squashfs.img
|
||||||
|
- squashfs.img - Provides the rootfs for the installer, which includes
|
||||||
|
components like anaconda
|
||||||
|
|
||||||
|
The original stock CentOS files are found:
|
||||||
|
/import/mirrors/CentOS/7.4.1708/os/x86_64/isolinux/initrd.img
|
||||||
|
/import/mirrors/CentOS/7.4.1708/os/x86_64/LiveOS/squashfs.img
|
||||||
|
|
||||||
|
# NOTE: before updating these files, assure that you've had a successful build
|
||||||
|
for the necessary files used in "kernel-rpms" and "rootfs-rpms".
|
||||||
|
# here are build procedures:
|
||||||
|
|
||||||
|
# kernel, kernel modules will be generated by this step
|
||||||
|
build-pkgs
|
||||||
|
|
||||||
|
# anaconda-*.tis.*.rpm rpm-*.tis*.rpm will be generated by this step
|
||||||
|
build-srpms --installer && build-rpms --installer
|
||||||
|
|
||||||
|
# systemd-*.tis.*.rpm and bind-utils-9.9.4-61.el7.x86_64.rpm, ima-evm-utils-1.0-1.el7.x86_64.rpm
|
||||||
|
# will be available after this step done
|
||||||
|
build-iso
|
||||||
|
|
||||||
|
===========
|
||||||
|
vmlinuz:
|
||||||
|
We're using the runtime kernel for this, so when we update the installer, we
|
||||||
|
just grab the kernel from build server or your own build environment.
|
||||||
|
|
||||||
|
Note -- The kernel to be used should be signed. The Jenkins builds will
|
||||||
|
produce signed kernels, but if you are concerned about the signature (for
|
||||||
|
example, if you are concerned that a developer kernel is being used or if
|
||||||
|
the signing server is behaving odd) then you can verify the integrity of
|
||||||
|
the kernel by going onto yow-cgts3-lx and using the command:
|
||||||
|
|
||||||
|
sbverify --cert [CERT] vmlinuz
|
||||||
|
|
||||||
|
The certificate specfied as the argument can be found in
|
||||||
|
$MY_REPO/addons/wr-cgcs/layers/cgcs/recipes-extended/shim-unsigned/files/tis-shim.crt
|
||||||
|
|
||||||
|
===========
|
||||||
|
initrd.img:
|
||||||
|
When we update the kernel and kernel modules for the installer, we need to
|
||||||
|
update the initrd.img. This is a manual procedure currently, and must be done
|
||||||
|
as **root**.
|
||||||
|
|
||||||
|
# First, extract the initrd.img:
|
||||||
|
|
||||||
|
ORIG_INITRD=$PWD/initrd.img
|
||||||
|
mkdir initrd.work
|
||||||
|
cd initrd.work
|
||||||
|
xzcat $ORIG_INITRD | cpio -i
|
||||||
|
|
||||||
|
# Make the necessary changes, and rebuild the initrd
|
||||||
|
|
||||||
|
# We want to include our kernel and required modules in the initrd. Copy their RPMs from
|
||||||
|
# the Jenkins build or local build folders (~/export/dist/isolinux/Packages/ and ~/std/rpmbuild/RPMS/)
|
||||||
|
# to ../kernel-rpms, to be extracted with rpm2cpio:
|
||||||
|
# kernel
|
||||||
|
# kmod-i40e
|
||||||
|
# kmod-ixgbe
|
||||||
|
# kmod-e1000e
|
||||||
|
# kmod-tpm
|
||||||
|
# mlnx-ofa_kernel-modules
|
||||||
|
#
|
||||||
|
# Also adding in dmidecode for debug purposes
|
||||||
|
|
||||||
|
|
||||||
|
# Delete the old kernel files:
|
||||||
|
rm -rf boot/ etc/modules-load.d/ etc/ld.so.conf.d/kernel-3.10.0-693.2.2.el7.tis.29.x86_64.conf lib/modules/3.10.0-693.2.2.el7.tis.29.x86_64/
|
||||||
|
|
||||||
|
# Extract the RPMs from the build system
|
||||||
|
# FYI, here are RPMs in "kernel-rpms":
|
||||||
|
|
||||||
|
# ls kernel-rpms/
|
||||||
|
kernel-3.10.0-693.2.2.el7.33.tis.x86_64.rpm kmod-i40e-rt-2.4.3-0.tis.6.x86_64.rpm mlnx-ofa_kernel-4.3-OFED.4.3.1.0.1.1.g8509e41.tis.1.x86_64.rpm
|
||||||
|
kernel-rt-3.10.0-693.2.2.rt56.623.el7.tis.39.x86_64.rpm kmod-ixgbe-5.2.3-0.tis.2.x86_64.rpm mlnx-ofa_kernel-devel-4.3-OFED.4.3.1.0.1.1.g8509e41.tis.1.x86_64.rpm
|
||||||
|
kmod-e1000e-3.3.6-0.tis.1.x86_64.rpm kmod-ixgbe-rt-5.2.3-0.tis.2.x86_64.rpm mlnx-ofa_kernel-modules-4.3-OFED.4.3.1.0.1.1.g8509e41.tis.1.x86_64.rpm
|
||||||
|
kmod-e1000e-rt-3.3.6-0.tis.1.x86_64.rpm kmod-tpm-4.12-0.tis.5.x86_64.rpm
|
||||||
|
kmod-i40e-2.4.3-0.tis.6.x86_64.rpm kmod-tpm-rt-4.12-0.tis.5.x86_64.rpm
|
||||||
|
|
||||||
|
|
||||||
|
for f in ../kernel-rpms/*.rpm ; do rpm2cpio $f | cpio -idu; done
|
||||||
|
|
||||||
|
# In a chroot, run depmods. The command is available from the kmod-i40e for syntax/args:
|
||||||
|
# [root@yow-cgts4-lx initrd.work]# rpm -qp --scripts ../kernel-rpms/kmod-i40e-* |grep depmod
|
||||||
|
# /usr/sbin/depmod -aeF "/boot/System.map-3.10.0-327.36.2.el7.9.tis.x86_64" "3.10.0-327.36.2.el7.9.tis.x86_64" > /dev/null || :
|
||||||
|
# /usr/sbin/depmod -aeF "/boot/System.map-3.10.0-327.36.2.el7.9.tis.x86_64" "3.10.0-327.36.2.el7.9.tis.x86_64" > /dev/null || :
|
||||||
|
|
||||||
|
chroot .
|
||||||
|
# <actual-kernel-version> need be replaced, for example, 3.10.0-693.2.2.el7.33.tis.x86_64
|
||||||
|
/usr/sbin/depmod -aeF "/boot/System.map-<actual-kernel-version>" "<actual-kernel-version>"
|
||||||
|
exit
|
||||||
|
|
||||||
|
# Remove the bisodevname package from initrd and squashfs
|
||||||
|
rm -f ./usr/lib/udev/rules.d/71-biosdevname.rules ./usr/sbin/biosdevname
|
||||||
|
|
||||||
|
# Rebuild the initrd
|
||||||
|
find . \
|
||||||
|
| cpio -o -H newc \
|
||||||
|
| xz --check=crc32 --x86 --lzma2=dict=512KiB \
|
||||||
|
> ../new-initrd.img
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
===========
|
||||||
|
squashfs.img:
|
||||||
|
If we want to make changes to the rootfs of the installer (ie. update anaconda),
|
||||||
|
we need to update the squashfs.img file. This file can be mounted, and contains
|
||||||
|
a rootfs image: LiveOS/rootfs.img
|
||||||
|
|
||||||
|
# Build the TIS-modified installer RPMs first (see anaconda jiggery-pokery at end of this file):
|
||||||
|
build-srpms --installer && build-rpms --installer
|
||||||
|
|
||||||
|
# We also need TIS-built systemd for NVME support, so copy the following from Jenkins build:
|
||||||
|
systemd-219-42.el7_4.1.tis.10.x86_64.rpm
|
||||||
|
systemd-libs-219-42.el7_4.1.tis.10.x86_64.rpm
|
||||||
|
systemd-sysv-219-42.el7_4.1.tis.10.x86_64.rpm
|
||||||
|
|
||||||
|
# We need to update the following RPMs in the rootfs
|
||||||
|
ima-evm-utils-1.0-1.el7.x86_64.rpm
|
||||||
|
rpm-4.14.0-1.tis.1.x86_64.rpm
|
||||||
|
rpm-build-4.14.0-1.tis.1.x86_64.rpm
|
||||||
|
rpm-build-libs-4.14.0-1.tis.1.x86_64.rpm
|
||||||
|
rpm-libs-4.14.0-1.tis.1.x86_64.rpm
|
||||||
|
rpm-plugin-systemd-inhibit-4.14.0-1.tis.1.x86_64.rpm
|
||||||
|
rpm-python-4.14.0-1.tis.1.x86_64.rpm
|
||||||
|
|
||||||
|
# We also now need bind-utils in the squashfs, due to the anaconda-preexec we've added.
|
||||||
|
bind-utils-9.9.4-51.el7.x86_64.rpm
|
||||||
|
|
||||||
|
# Mount the squashfs.img and copy the rootfs out:
|
||||||
|
ORIG_SQUASHFS=$PWD/squashfs.img
|
||||||
|
mkdir squashfs.mnt
|
||||||
|
mount -o loop -t squashfs $ORIG_SQUASHFS squashfs.mnt
|
||||||
|
mkdir LiveOS
|
||||||
|
cp squashfs.mnt/LiveOS/rootfs.img LiveOS/
|
||||||
|
umount squashfs.mnt
|
||||||
|
|
||||||
|
# Now mount the rootfs.img file:
|
||||||
|
mkdir squashfs.work
|
||||||
|
mount -o loop LiveOS/rootfs.img squashfs.work
|
||||||
|
cd squashfs.work
|
||||||
|
|
||||||
|
# You can now make changes as needed, and they're reflected in the rootfs.img
|
||||||
|
|
||||||
|
# For anaconda, ignore these RPMs that are built:
|
||||||
|
# anaconda-debuginfo
|
||||||
|
# anaconda-dracut
|
||||||
|
# anaconda-widgets-devel
|
||||||
|
# anaconda-gui
|
||||||
|
#
|
||||||
|
|
||||||
|
# FYI, here are RPMs from "rootfs-rpms":
|
||||||
|
ls rootfs-rpms/
|
||||||
|
anaconda-21.48.22.121-1.el7.centos.tis.5.x86_64.rpm rpm-4.14.0-1.tis.1.x86_64.rpm
|
||||||
|
anaconda-core-21.48.22.121-1.el7.centos.tis.5.x86_64.rpm rpm-build-4.14.0-1.tis.1.x86_64.rpm
|
||||||
|
anaconda-debuginfo-21.48.22.121-1.el7.centos.tis.5.x86_64.rpm rpm-build-libs-4.14.0-1.tis.1.x86_64.rpm
|
||||||
|
anaconda-dracut-21.48.22.121-1.el7.centos.tis.5.x86_64.rpm rpm-libs-4.14.0-1.tis.1.x86_64.rpm
|
||||||
|
anaconda-gui-21.48.22.121-1.el7.centos.tis.5.x86_64.rpm rpm-plugin-systemd-inhibit-4.14.0-1.tis.1.x86_64.rpm
|
||||||
|
anaconda-tui-21.48.22.121-1.el7.centos.tis.5.x86_64.rpm rpm-python-4.14.0-1.tis.1.x86_64.rpm
|
||||||
|
anaconda-widgets-21.48.22.121-1.el7.centos.tis.5.x86_64.rpm systemd-219-42.el7_4.1.tis.10.x86_64.rpm
|
||||||
|
anaconda-widgets-devel-21.48.22.121-1.el7.centos.tis.5.x86_64.rpm systemd-libs-219-42.el7_4.1.tis.10.x86_64.rpm
|
||||||
|
bind-utils-9.9.4-61.el7.x86_64.rpm systemd-sysv-219-42.el7_4.1.tis.10.x86_64.rpm
|
||||||
|
ima-evm-utils-1.0-1.el7.x86_64.rpm
|
||||||
|
|
||||||
|
# IMPORTANT Note: when copying “systemd-219-42.el7_4.1.tis.10.x86_64.rpm” from build target folders to “rootfs-rpms”,
|
||||||
|
# we need to get it from “../export/dist/isolinux/Packages/systemd-219-42.el7_4.1.tis.10.x86_64.rpm”, instead of other
|
||||||
|
# folders (for example, ../std/rpmbuild/RPMS/systemd-219-42.el7_4.1.tis.10.x86_64.rpm), they are actually having
|
||||||
|
# different sizes and delta in contents.
|
||||||
|
|
||||||
|
# Extract the rest into the squashfs
|
||||||
|
rm -rf usr/lib64/python2.7/site-packages/pyanaconda/
|
||||||
|
rm -rf usr/lib64/python2.7/site-packages/rpm/
|
||||||
|
# get files from RPMs and copy them into corresponding folders
|
||||||
|
for f in ../rootfs-rpms/*.rpm ; do rpm2cpio $f | cpio -idu; done
|
||||||
|
#find old .pyo files and delete them
|
||||||
|
find usr/lib64/python2.7/site-packages/pyanaconda/ usr/lib64/python2.7/site-packages/rpm/ -name *.pyo | xargs rm
|
||||||
|
|
||||||
|
|
||||||
|
# IMPORTANT Note, please do NOT forget the following step:
|
||||||
|
# MUST HAVE!!! Update the kernel and related kernel modules, same as what was done for "initrd.img" updating
|
||||||
|
for f in ../kernel-rpms/*.rpm ; do rpm2cpio $f | cpio -idu; done
|
||||||
|
|
||||||
|
# Remove the bisodevname package from initrd and squashfs
|
||||||
|
rm -f ./usr/lib/udev/rules.d/71-biosdevname.rules ./usr/sbin/biosdevname
|
||||||
|
|
||||||
|
cd ..
|
||||||
|
umount squashfs.work
|
||||||
|
|
||||||
|
# Build/rebuild a new squashfs.img (output file is test.squashfs.img in this
|
||||||
|
# example)
|
||||||
|
# Note: You may need to install "squashfs-tools" in advance
|
||||||
|
#remove the old version named test.squashfs.img
|
||||||
|
rm -f test.squashfs.img
|
||||||
|
#make the new squashfs image named "test.squashfs.img" or another name
|
||||||
|
mksquashfs LiveOS test.squashfs.img -keep-as-directory -comp xz -b 1M
|
||||||
|
|
||||||
|
|
||||||
|
===========
|
||||||
|
To test with design build, update the following files with paths to your test
|
||||||
|
files and filenames:
|
||||||
|
recipes-installer/pxe-network-installer/centos/build_srpm.data
|
||||||
|
recipes-installer/pxe-network-installer/centos/pxe-network-installer.spec
|
||||||
|
|
||||||
|
|
||||||
|
===========
|
||||||
|
Delivering changes:
|
||||||
|
Copy the updated vmlinuz (from kernel rpm), initrd.img, and squashfs.img files,
|
||||||
|
with appropriate version suffixes, to mirror folder where you placethese files.
|
||||||
|
|
||||||
|
Update the pxe-network-installer files to point to the new versions.
|
||||||
|
|
||||||
|
|
||||||
|
===========
|
||||||
|
NOTE: The following jiggery-pokery is no longer required after recent mirror updates.
|
||||||
|
I'm keeping the text here, though, for future reference. Just in case.
|
||||||
|
|
||||||
|
Jiggery-pokery required to build anaconda after rebase to 7.3:
|
||||||
|
|
||||||
|
The anaconda build reports a dependency error:
|
||||||
|
|
||||||
|
12:45:41 Error: Package: libgudev1-219-19.el7_2.13.x86_64 (TisCentos7Distro)
|
||||||
|
12:45:41 Requires: systemd-libs = 219-19.el7_2.13
|
||||||
|
12:45:41 Installed: systemd-libs-219-30.el7_3.6.x86_64 (@TisCentos7Distro)
|
||||||
|
12:45:41 systemd-libs = 219-30.el7_3.6
|
||||||
|
12:45:41 Available: systemd-libs-219-19.el7_2.13.x86_64 (TisCentos7Distro)
|
||||||
|
12:45:41 systemd-libs = 219-19.el7_2.13
|
||||||
|
12:45:41 You could try using --skip-broken to work around the problem
|
||||||
|
12:45:41 You could try running: rpm -Va --nofiles --nodigest
|
||||||
|
|
||||||
|
Our build system is setup to install the highest versions of packages, but there's a dependency
|
||||||
|
that has a version-specific dependency to an older version of the RPM, so it requires a little
|
||||||
|
massaging to get the anaconda RPM to build.
|
||||||
|
|
||||||
|
Step 1: Add a symlink into the cgcs-centos-repo dir:
|
||||||
|
ln -s /import/mirrors/CentOS/tis-r4-CentOS/mitaka/Binary/x86_64/systemd-libs-219-19.el7_2.13.x86_64.rpm \
|
||||||
|
$MY_REPO/cgcs-centos-repo/Binary/x86_64/
|
||||||
|
|
||||||
|
Step 2: Try to build, so the repodata is updated (this will still fail)
|
||||||
|
build-srpms --installer && build-rpms --installer
|
||||||
|
|
||||||
|
Step 3: Short-circuit the update_cgcs_repo function in build-rpms to avoid repodata update and mock env clearout
|
||||||
|
|
||||||
|
Step 4: Manually install RPM in mock env
|
||||||
|
mock -r installer/${MY_BUILD_ENVIRONMENT}-installer.cfg --copyin systemd-libs-219-19.el7_2.13.x86_64.rpm systemd-libs-219-19.el7_2.13.x86_64.rpm
|
||||||
|
mock -r installer/${MY_BUILD_ENVIRONMENT}-installer.cfg --shell
|
||||||
|
rpm -i --force systemd-libs-219-19.el7_2.13.x86_64.rpm
|
||||||
|
|
||||||
|
Step 5: Build with success!
|
||||||
|
build-srpms --installer && build-rpms --installer
|
||||||
|
|
12
installer/pxe-network-installer/centos/build_srpm.data
Normal file
12
installer/pxe-network-installer/centos/build_srpm.data
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
COPY_LIST="pxe-network-installer//* \
|
||||||
|
$CGCS_BASE/mwa-beas/bsp-files/grub.cfg \
|
||||||
|
$CGCS_BASE/mwa-beas/bsp-files/kickstarts/post_clone_iso_ks.cfg \
|
||||||
|
$SRC_BASE/cgcs-centos-repo/Binary/images/efiboot.img \
|
||||||
|
/import/mirrors/CentOS/tis-installer/initrd.img-stx-0.1 \
|
||||||
|
/import/mirrors/CentOS/tis-installer/squashfs.img-stx-0.1 \
|
||||||
|
/import/mirrors/CentOS/tis-installer/vmlinuz-stx-0.1 \
|
||||||
|
"
|
||||||
|
|
||||||
|
TIS_PATCH_VER=25
|
||||||
|
BUILD_IS_BIG=4
|
||||||
|
BUILD_IS_SLOW=4
|
@ -0,0 +1,155 @@
|
|||||||
|
Summary: TIS Network Installation
|
||||||
|
Name: pxe-network-installer
|
||||||
|
Version: 1.0
|
||||||
|
Release: %{tis_patch_ver}%{?_tis_dist}
|
||||||
|
License: Apache-2.0
|
||||||
|
Group: base
|
||||||
|
Packager: Wind River <info@windriver.com>
|
||||||
|
URL: unknown
|
||||||
|
|
||||||
|
%define tis_image_version stx-0.1
|
||||||
|
|
||||||
|
Source0: LICENSE
|
||||||
|
|
||||||
|
Source001: vmlinuz-%{tis_image_version}
|
||||||
|
Source002: initrd.img-%{tis_image_version}
|
||||||
|
Source003: squashfs.img-%{tis_image_version}
|
||||||
|
|
||||||
|
Source010: pxeboot-update.sh
|
||||||
|
Source011: grub.cfg
|
||||||
|
Source012: efiboot.img
|
||||||
|
Source013: post_clone_iso_ks.cfg
|
||||||
|
|
||||||
|
Source030: default
|
||||||
|
Source031: default.static
|
||||||
|
Source032: centos-pxe-controller-install
|
||||||
|
Source033: centos-pxe-compute-install
|
||||||
|
Source034: centos-pxe-smallsystem-install
|
||||||
|
Source035: centos-pxe-storage-install
|
||||||
|
Source036: centos-pxe-compute_lowlatency-install
|
||||||
|
Source037: centos-pxe-smallsystem_lowlatency-install
|
||||||
|
|
||||||
|
Source050: pxe-grub.cfg
|
||||||
|
Source051: pxe-grub.cfg.static
|
||||||
|
Source052: efi-centos-pxe-controller-install
|
||||||
|
Source053: efi-centos-pxe-compute-install
|
||||||
|
Source054: efi-centos-pxe-smallsystem-install
|
||||||
|
Source055: efi-centos-pxe-storage-install
|
||||||
|
Source056: efi-centos-pxe-compute_lowlatency-install
|
||||||
|
Source057: efi-centos-pxe-smallsystem_lowlatency-install
|
||||||
|
|
||||||
|
|
||||||
|
BuildRequires: syslinux
|
||||||
|
BuildRequires: grub2
|
||||||
|
|
||||||
|
Requires: grub2-efi-pxeboot
|
||||||
|
|
||||||
|
%description
|
||||||
|
TIS Network Installation
|
||||||
|
|
||||||
|
%files
|
||||||
|
%defattr(-,root,root,-)
|
||||||
|
|
||||||
|
%install
|
||||||
|
install -v -d -m 755 %{buildroot}/pxeboot
|
||||||
|
install -v -d -m 755 %{buildroot}/pxeboot/pxelinux.cfg.files
|
||||||
|
install -v -d -m 755 %{buildroot}/pxeboot/rel-%{platform_release}
|
||||||
|
install -v -d -m 755 %{buildroot}/pxeboot/EFI
|
||||||
|
install -v -d -m 755 %{buildroot}/pxeboot/EFI/centos
|
||||||
|
install -v -d -m 755 %{buildroot}/pxeboot/EFI/centos/x86_64-efi
|
||||||
|
|
||||||
|
install -v -m 644 %{_sourcedir}/vmlinuz-%{tis_image_version} \
|
||||||
|
%{buildroot}/pxeboot/rel-%{platform_release}/installer-bzImage_1.0
|
||||||
|
install -v -m 644 %{_sourcedir}/initrd.img-%{tis_image_version} \
|
||||||
|
%{buildroot}/pxeboot/rel-%{platform_release}/installer-intel-x86-64-initrd_1.0
|
||||||
|
ln -s installer-bzImage_1.0 %{buildroot}/pxeboot/rel-%{platform_release}/installer-bzImage
|
||||||
|
ln -s installer-intel-x86-64-initrd_1.0 %{buildroot}/pxeboot/rel-%{platform_release}/installer-initrd
|
||||||
|
|
||||||
|
install -v -D -m 644 %{_sourcedir}/squashfs.img-%{tis_image_version} \
|
||||||
|
%{buildroot}/www/pages/feed/rel-%{platform_release}/LiveOS/squashfs.img
|
||||||
|
|
||||||
|
install -v -d -m 755 %{buildroot}%{_sbindir}
|
||||||
|
|
||||||
|
install -v -m 755 %{_sourcedir}/pxeboot-update.sh %{buildroot}%{_sbindir}/pxeboot-update-%{platform_release}.sh
|
||||||
|
|
||||||
|
install -v -m 644 %{_sourcedir}/post_clone_iso_ks.cfg \
|
||||||
|
%{buildroot}/pxeboot/post_clone_iso_ks.cfg
|
||||||
|
|
||||||
|
install -v -m 644 %{_sourcedir}/default \
|
||||||
|
%{buildroot}/pxeboot/pxelinux.cfg.files/default
|
||||||
|
install -v -m 644 %{_sourcedir}/default.static \
|
||||||
|
%{buildroot}/pxeboot/pxelinux.cfg.files/default.static
|
||||||
|
install -v -m 644 %{_sourcedir}/centos-pxe-controller-install \
|
||||||
|
%{buildroot}/pxeboot/pxelinux.cfg.files/pxe-controller-install-%{platform_release}
|
||||||
|
install -v -m 644 %{_sourcedir}/centos-pxe-compute-install \
|
||||||
|
%{buildroot}/pxeboot/pxelinux.cfg.files/pxe-compute-install-%{platform_release}
|
||||||
|
install -v -m 644 %{_sourcedir}/centos-pxe-smallsystem-install \
|
||||||
|
%{buildroot}/pxeboot/pxelinux.cfg.files/pxe-smallsystem-install-%{platform_release}
|
||||||
|
install -v -m 644 %{_sourcedir}/centos-pxe-storage-install \
|
||||||
|
%{buildroot}/pxeboot/pxelinux.cfg.files/pxe-storage-install-%{platform_release}
|
||||||
|
install -v -m 644 %{_sourcedir}/centos-pxe-compute_lowlatency-install \
|
||||||
|
%{buildroot}/pxeboot/pxelinux.cfg.files/pxe-compute_lowlatency-install-%{platform_release}
|
||||||
|
install -v -m 644 %{_sourcedir}/centos-pxe-smallsystem_lowlatency-install \
|
||||||
|
%{buildroot}/pxeboot/pxelinux.cfg.files/pxe-smallsystem_lowlatency-install-%{platform_release}
|
||||||
|
|
||||||
|
|
||||||
|
# UEFI support
|
||||||
|
install -v -m 644 %{_sourcedir}/pxe-grub.cfg \
|
||||||
|
%{buildroot}/pxeboot/pxelinux.cfg.files/grub.cfg
|
||||||
|
install -v -m 644 %{_sourcedir}/pxe-grub.cfg.static \
|
||||||
|
%{buildroot}/pxeboot/pxelinux.cfg.files/grub.cfg.static
|
||||||
|
# Copy EFI boot image. It will be used to create ISO on the Controller.
|
||||||
|
install -v -m 644 %{_sourcedir}/efiboot.img \
|
||||||
|
%{buildroot}/pxeboot/rel-%{platform_release}/
|
||||||
|
install -v -m 644 %{_sourcedir}/efi-centos-pxe-controller-install \
|
||||||
|
%{buildroot}/pxeboot/pxelinux.cfg.files/efi-pxe-controller-install-%{platform_release}
|
||||||
|
install -v -m 644 %{_sourcedir}/efi-centos-pxe-compute-install \
|
||||||
|
%{buildroot}/pxeboot/pxelinux.cfg.files/efi-pxe-compute-install-%{platform_release}
|
||||||
|
install -v -m 644 %{_sourcedir}/efi-centos-pxe-smallsystem-install \
|
||||||
|
%{buildroot}/pxeboot/pxelinux.cfg.files/efi-pxe-smallsystem-install-%{platform_release}
|
||||||
|
install -v -m 644 %{_sourcedir}/efi-centos-pxe-storage-install \
|
||||||
|
%{buildroot}/pxeboot/pxelinux.cfg.files/efi-pxe-storage-install-%{platform_release}
|
||||||
|
install -v -m 644 %{_sourcedir}/efi-centos-pxe-compute_lowlatency-install \
|
||||||
|
%{buildroot}/pxeboot/pxelinux.cfg.files/efi-pxe-compute_lowlatency-install-%{platform_release}
|
||||||
|
install -v -m 644 %{_sourcedir}/efi-centos-pxe-smallsystem_lowlatency-install \
|
||||||
|
%{buildroot}/pxeboot/pxelinux.cfg.files/efi-pxe-smallsystem_lowlatency-install-%{platform_release}
|
||||||
|
|
||||||
|
|
||||||
|
sed -i "s/xxxSW_VERSIONxxx/%{platform_release}/g" \
|
||||||
|
%{buildroot}/pxeboot/pxelinux.cfg.files/pxe-* \
|
||||||
|
%{buildroot}/pxeboot/pxelinux.cfg.files/efi-pxe-*
|
||||||
|
|
||||||
|
# Copy files from the syslinux pkg
|
||||||
|
install -v -m 0644 \
|
||||||
|
%{_datadir}/syslinux/menu.c32 \
|
||||||
|
%{_datadir}/syslinux/vesamenu.c32 \
|
||||||
|
%{_datadir}/syslinux/chain.c32 \
|
||||||
|
%{_datadir}/syslinux/linux.c32 \
|
||||||
|
%{_datadir}/syslinux/reboot.c32 \
|
||||||
|
%{_datadir}/syslinux/pxechain.com \
|
||||||
|
%{_datadir}/syslinux/pxelinux.0 \
|
||||||
|
%{_datadir}/syslinux/gpxelinux.0 \
|
||||||
|
%{buildroot}/pxeboot
|
||||||
|
|
||||||
|
# Copy files from grub2. Centos UEFI bootloader expect these files
|
||||||
|
install -v -m 0644 \
|
||||||
|
%{_prefix}/lib/grub/i386-pc/command.lst \
|
||||||
|
%{_prefix}/lib/grub/i386-pc/fs.lst \
|
||||||
|
%{_prefix}/lib/grub/i386-pc/crypto.lst \
|
||||||
|
%{_prefix}/lib/grub/i386-pc/terminal.lst \
|
||||||
|
%{buildroot}/pxeboot/EFI/centos/x86_64-efi
|
||||||
|
# Copy Titanium grub.cfg. It will be used to create ISO on the Controller.
|
||||||
|
install -v -m 0644 %{_sourcedir}/grub.cfg \
|
||||||
|
%{buildroot}/pxeboot/EFI/
|
||||||
|
|
||||||
|
# UEFI bootloader expect the grub.cfg file to be in /pxeboot/ so create a symlink for it
|
||||||
|
ln -s pxelinux.cfg/grub.cfg %{buildroot}/pxeboot/grub.cfg
|
||||||
|
|
||||||
|
%files
|
||||||
|
%license ../SOURCES/LICENSE
|
||||||
|
%defattr(-,root,root,-)
|
||||||
|
%dir /pxeboot
|
||||||
|
/pxeboot/*
|
||||||
|
%{_sbindir}/pxeboot-update-%{platform_release}.sh
|
||||||
|
/www/pages/feed/rel-%{platform_release}/LiveOS/squashfs.img
|
||||||
|
|
202
installer/pxe-network-installer/pxe-network-installer/LICENSE
Normal file
202
installer/pxe-network-installer/pxe-network-installer/LICENSE
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
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.
|
@ -0,0 +1,27 @@
|
|||||||
|
SERIAL 0 115200
|
||||||
|
TIMEOUT 50
|
||||||
|
DEFAULT menu.c32
|
||||||
|
|
||||||
|
# Menu Configuration
|
||||||
|
MENU WIDTH 80
|
||||||
|
MENU MARGIN 10
|
||||||
|
MENU PASSWORDMARGIN 3
|
||||||
|
MENU ROWS 12
|
||||||
|
MENU TABMSGROW 18
|
||||||
|
MENU CMDLINEROW 18
|
||||||
|
MENU ENDROW 24
|
||||||
|
MENU PASSWORDROW 11
|
||||||
|
MENU TIMEOUTROW 20
|
||||||
|
|
||||||
|
PROMPT 0
|
||||||
|
NOESCAPE 1
|
||||||
|
NOCOMPLETE 1
|
||||||
|
ALLOWOPTIONS 0
|
||||||
|
|
||||||
|
LABEL 1
|
||||||
|
MENU LABEL ^1) Compute
|
||||||
|
MENU DEFAULT
|
||||||
|
KERNEL rel-xxxSW_VERSIONxxx/installer-bzImage
|
||||||
|
APPEND initrd=rel-xxxSW_VERSIONxxx/installer-initrd bootifonly=1 devfs=nomount inst.repo=http://pxecontroller/feed/rel-xxxSW_VERSIONxxx/ inst.ks=http://pxecontroller/feed/rel-xxxSW_VERSIONxxx/net_compute_ks.cfg usbcore.autosuspend=-1 biosdevname=0 rd.net.timeout.dhcp=120 xxxAPPEND_OPTIONSxxx
|
||||||
|
IPAPPEND 2
|
||||||
|
|
@ -0,0 +1,27 @@
|
|||||||
|
SERIAL 0 115200
|
||||||
|
TIMEOUT 50
|
||||||
|
DEFAULT menu.c32
|
||||||
|
|
||||||
|
# Menu Configuration
|
||||||
|
MENU WIDTH 80
|
||||||
|
MENU MARGIN 10
|
||||||
|
MENU PASSWORDMARGIN 3
|
||||||
|
MENU ROWS 12
|
||||||
|
MENU TABMSGROW 18
|
||||||
|
MENU CMDLINEROW 18
|
||||||
|
MENU ENDROW 24
|
||||||
|
MENU PASSWORDROW 11
|
||||||
|
MENU TIMEOUTROW 20
|
||||||
|
|
||||||
|
PROMPT 0
|
||||||
|
NOESCAPE 1
|
||||||
|
NOCOMPLETE 1
|
||||||
|
ALLOWOPTIONS 0
|
||||||
|
|
||||||
|
LABEL 1
|
||||||
|
MENU LABEL ^1) Lowlatency Compute
|
||||||
|
MENU DEFAULT
|
||||||
|
KERNEL rel-xxxSW_VERSIONxxx/installer-bzImage
|
||||||
|
APPEND initrd=rel-xxxSW_VERSIONxxx/installer-initrd bootifonly=1 devfs=nomount inst.repo=http://pxecontroller/feed/rel-xxxSW_VERSIONxxx/ inst.ks=http://pxecontroller/feed/rel-xxxSW_VERSIONxxx/net_compute_lowlatency_ks.cfg usbcore.autosuspend=-1 biosdevname=0 rd.net.timeout.dhcp=120 xxxAPPEND_OPTIONSxxx
|
||||||
|
IPAPPEND 2
|
||||||
|
|
@ -0,0 +1,27 @@
|
|||||||
|
SERIAL 0 115200
|
||||||
|
TIMEOUT 50
|
||||||
|
DEFAULT menu.c32
|
||||||
|
|
||||||
|
# Menu Configuration
|
||||||
|
MENU WIDTH 80
|
||||||
|
MENU MARGIN 10
|
||||||
|
MENU PASSWORDMARGIN 3
|
||||||
|
MENU ROWS 12
|
||||||
|
MENU TABMSGROW 18
|
||||||
|
MENU CMDLINEROW 18
|
||||||
|
MENU ENDROW 24
|
||||||
|
MENU PASSWORDROW 11
|
||||||
|
MENU TIMEOUTROW 20
|
||||||
|
|
||||||
|
PROMPT 0
|
||||||
|
NOESCAPE 1
|
||||||
|
NOCOMPLETE 1
|
||||||
|
ALLOWOPTIONS 0
|
||||||
|
|
||||||
|
LABEL 1
|
||||||
|
MENU LABEL ^1) Standard Controller
|
||||||
|
MENU DEFAULT
|
||||||
|
KERNEL rel-xxxSW_VERSIONxxx/installer-bzImage
|
||||||
|
APPEND initrd=rel-xxxSW_VERSIONxxx/installer-initrd bootifonly=1 devfs=nomount inst.repo=http://pxecontroller/feed/rel-xxxSW_VERSIONxxx/ inst.ks=http://pxecontroller/feed/rel-xxxSW_VERSIONxxx/net_controller_ks.cfg usbcore.autosuspend=-1 biosdevname=0 rd.net.timeout.dhcp=120 xxxAPPEND_OPTIONSxxx
|
||||||
|
IPAPPEND 2
|
||||||
|
|
@ -0,0 +1,27 @@
|
|||||||
|
SERIAL 0 115200
|
||||||
|
TIMEOUT 50
|
||||||
|
DEFAULT menu.c32
|
||||||
|
|
||||||
|
# Menu Configuration
|
||||||
|
MENU WIDTH 80
|
||||||
|
MENU MARGIN 10
|
||||||
|
MENU PASSWORDMARGIN 3
|
||||||
|
MENU ROWS 12
|
||||||
|
MENU TABMSGROW 18
|
||||||
|
MENU CMDLINEROW 18
|
||||||
|
MENU ENDROW 24
|
||||||
|
MENU PASSWORDROW 11
|
||||||
|
MENU TIMEOUTROW 20
|
||||||
|
|
||||||
|
PROMPT 0
|
||||||
|
NOESCAPE 1
|
||||||
|
NOCOMPLETE 1
|
||||||
|
ALLOWOPTIONS 0
|
||||||
|
|
||||||
|
LABEL 1
|
||||||
|
MENU LABEL ^1) All-in-one
|
||||||
|
MENU DEFAULT
|
||||||
|
KERNEL rel-xxxSW_VERSIONxxx/installer-bzImage
|
||||||
|
APPEND initrd=rel-xxxSW_VERSIONxxx/installer-initrd bootifonly=1 devfs=nomount inst.repo=http://pxecontroller/feed/rel-xxxSW_VERSIONxxx/ inst.ks=http://pxecontroller/feed/rel-xxxSW_VERSIONxxx/net_smallsystem_ks.cfg usbcore.autosuspend=-1 biosdevname=0 rd.net.timeout.dhcp=120 xxxAPPEND_OPTIONSxxx
|
||||||
|
IPAPPEND 2
|
||||||
|
|
@ -0,0 +1,27 @@
|
|||||||
|
SERIAL 0 115200
|
||||||
|
TIMEOUT 50
|
||||||
|
DEFAULT menu.c32
|
||||||
|
|
||||||
|
# Menu Configuration
|
||||||
|
MENU WIDTH 80
|
||||||
|
MENU MARGIN 10
|
||||||
|
MENU PASSWORDMARGIN 3
|
||||||
|
MENU ROWS 12
|
||||||
|
MENU TABMSGROW 18
|
||||||
|
MENU CMDLINEROW 18
|
||||||
|
MENU ENDROW 24
|
||||||
|
MENU PASSWORDROW 11
|
||||||
|
MENU TIMEOUTROW 20
|
||||||
|
|
||||||
|
PROMPT 0
|
||||||
|
NOESCAPE 1
|
||||||
|
NOCOMPLETE 1
|
||||||
|
ALLOWOPTIONS 0
|
||||||
|
|
||||||
|
LABEL 1
|
||||||
|
MENU LABEL ^1) All-in-one (lowlatency)
|
||||||
|
MENU DEFAULT
|
||||||
|
KERNEL rel-xxxSW_VERSIONxxx/installer-bzImage
|
||||||
|
APPEND initrd=rel-xxxSW_VERSIONxxx/installer-initrd bootifonly=1 devfs=nomount inst.repo=http://pxecontroller/feed/rel-xxxSW_VERSIONxxx/ inst.ks=http://pxecontroller/feed/rel-xxxSW_VERSIONxxx/net_smallsystem_lowlatency_ks.cfg usbcore.autosuspend=-1 biosdevname=0 rd.net.timeout.dhcp=120 xxxAPPEND_OPTIONSxxx
|
||||||
|
IPAPPEND 2
|
||||||
|
|
@ -0,0 +1,27 @@
|
|||||||
|
SERIAL 0 115200
|
||||||
|
TIMEOUT 50
|
||||||
|
DEFAULT menu.c32
|
||||||
|
|
||||||
|
# Menu Configuration
|
||||||
|
MENU WIDTH 80
|
||||||
|
MENU MARGIN 10
|
||||||
|
MENU PASSWORDMARGIN 3
|
||||||
|
MENU ROWS 12
|
||||||
|
MENU TABMSGROW 18
|
||||||
|
MENU CMDLINEROW 18
|
||||||
|
MENU ENDROW 24
|
||||||
|
MENU PASSWORDROW 11
|
||||||
|
MENU TIMEOUTROW 20
|
||||||
|
|
||||||
|
PROMPT 0
|
||||||
|
NOESCAPE 1
|
||||||
|
NOCOMPLETE 1
|
||||||
|
ALLOWOPTIONS 0
|
||||||
|
|
||||||
|
LABEL 1
|
||||||
|
MENU LABEL ^1) Storage
|
||||||
|
MENU DEFAULT
|
||||||
|
KERNEL rel-xxxSW_VERSIONxxx/installer-bzImage
|
||||||
|
APPEND initrd=rel-xxxSW_VERSIONxxx/installer-initrd bootifonly=1 devfs=nomount inst.repo=http://pxecontroller/feed/rel-xxxSW_VERSIONxxx/ inst.ks=http://pxecontroller/feed/rel-xxxSW_VERSIONxxx/net_storage_ks.cfg usbcore.autosuspend=-1 biosdevname=0 rd.net.timeout.dhcp=120 xxxAPPEND_OPTIONSxxx
|
||||||
|
IPAPPEND 2
|
||||||
|
|
@ -0,0 +1,38 @@
|
|||||||
|
SERIAL 0 115200
|
||||||
|
TIMEOUT 100
|
||||||
|
DEFAULT menu.c32
|
||||||
|
|
||||||
|
# Menu Configuration
|
||||||
|
MENU WIDTH 80
|
||||||
|
MENU MARGIN 10
|
||||||
|
MENU PASSWORDMARGIN 3
|
||||||
|
MENU ROWS 12
|
||||||
|
MENU TABMSGROW 18
|
||||||
|
MENU CMDLINEROW 18
|
||||||
|
MENU ENDROW 24
|
||||||
|
MENU PASSWORDROW 11
|
||||||
|
MENU TIMEOUTROW 20
|
||||||
|
MENU AUTOBOOT Automatic retry in # seconds
|
||||||
|
|
||||||
|
MENU COLOR UNSEL 36;44
|
||||||
|
MENU COLOR SEL 36;44
|
||||||
|
MENU COLOR DISABLED 36;44
|
||||||
|
|
||||||
|
PROMPT 0
|
||||||
|
NOESCAPE 1
|
||||||
|
NOCOMPLETE 1
|
||||||
|
ALLOWOPTIONS 0
|
||||||
|
|
||||||
|
MENU SEPARATOR
|
||||||
|
|
||||||
|
LABEL Waiting for this node to be configured.
|
||||||
|
MENU DISABLE
|
||||||
|
|
||||||
|
MENU SEPARATOR
|
||||||
|
|
||||||
|
LABEL Please configure the personality for this node from the
|
||||||
|
MENU DISABLE
|
||||||
|
|
||||||
|
LABEL controller node in order to proceed.
|
||||||
|
MENU DEFAULT
|
||||||
|
KERNEL pxelinux.0
|
@ -0,0 +1,47 @@
|
|||||||
|
SERIAL 0 115200
|
||||||
|
TIMEOUT 100
|
||||||
|
DEFAULT menu.c32
|
||||||
|
|
||||||
|
# Menu Configuration
|
||||||
|
MENU WIDTH 80
|
||||||
|
MENU MARGIN 10
|
||||||
|
MENU PASSWORDMARGIN 3
|
||||||
|
MENU ROWS 12
|
||||||
|
MENU TABMSGROW 18
|
||||||
|
MENU CMDLINEROW 18
|
||||||
|
MENU ENDROW 24
|
||||||
|
MENU PASSWORDROW 11
|
||||||
|
MENU TIMEOUTROW 20
|
||||||
|
MENU AUTOBOOT Automatic retry in # seconds
|
||||||
|
|
||||||
|
MENU COLOR UNSEL 36;44
|
||||||
|
MENU COLOR SEL 36;44
|
||||||
|
MENU COLOR DISABLED 36;44
|
||||||
|
|
||||||
|
PROMPT 0
|
||||||
|
NOESCAPE 1
|
||||||
|
NOCOMPLETE 1
|
||||||
|
ALLOWOPTIONS 0
|
||||||
|
|
||||||
|
MENU SEPARATOR
|
||||||
|
|
||||||
|
LABEL Waiting for this node to be configured.
|
||||||
|
MENU DISABLE
|
||||||
|
|
||||||
|
MENU SEPARATOR
|
||||||
|
|
||||||
|
LABEL This system has been configured with static management
|
||||||
|
MENU DISABLE
|
||||||
|
|
||||||
|
LABEL and infrastructure IP address allocation. This requires
|
||||||
|
MENU DISABLE
|
||||||
|
|
||||||
|
LABEL that the node be manually provisioned in System
|
||||||
|
MENU DISABLE
|
||||||
|
|
||||||
|
LABEL Inventory using the 'system host-add' CLI, GUI, or
|
||||||
|
MENU DISABLE
|
||||||
|
|
||||||
|
LABEL sysinv-api equivalent.
|
||||||
|
MENU DISABLE
|
||||||
|
KERNEL pxelinux.0
|
@ -0,0 +1,9 @@
|
|||||||
|
default=0
|
||||||
|
timeout=10
|
||||||
|
GRUB_HIDDEN_TIMEOUT=0
|
||||||
|
GRUB_TIMEOUT_STYLE='countdown'
|
||||||
|
|
||||||
|
menuentry '1) UEFI Compute' {
|
||||||
|
linuxefi rel-xxxSW_VERSIONxxx/installer-bzImage bootifonly=1 devfs=nomount inst.repo=http://pxecontroller/feed/rel-xxxSW_VERSIONxxx/ inst.ks=http://pxecontroller/feed/rel-xxxSW_VERSIONxxx/net_compute_ks.cfg usbcore.autosuspend=-1 biosdevname=0 rd.net.timeout.dhcp=120 ksdevice=$net_default_mac BOOTIF=$net_default_mac xxxAPPEND_OPTIONSxxx
|
||||||
|
initrdefi rel-xxxSW_VERSIONxxx/installer-initrd
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
default=0
|
||||||
|
timeout=10
|
||||||
|
GRUB_HIDDEN_TIMEOUT=0
|
||||||
|
GRUB_TIMEOUT_STYLE='countdown'
|
||||||
|
|
||||||
|
menuentry '1) UEFI Lowlatency Compute' {
|
||||||
|
linuxefi rel-xxxSW_VERSIONxxx/installer-bzImage bootifonly=1 devfs=nomount inst.repo=http://pxecontroller/feed/rel-xxxSW_VERSIONxxx/ inst.ks=http://pxecontroller/feed/rel-xxxSW_VERSIONxxx/net_compute_lowlatency_ks.cfg usbcore.autosuspend=-1 biosdevname=0 rd.net.timeout.dhcp=120 ksdevice=$net_default_mac BOOTIF=$net_default_mac xxxAPPEND_OPTIONSxxx
|
||||||
|
initrdefi rel-xxxSW_VERSIONxxx/installer-initrd
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
default=0
|
||||||
|
timeout=10
|
||||||
|
GRUB_HIDDEN_TIMEOUT=0
|
||||||
|
GRUB_TIMEOUT_STYLE='countdown'
|
||||||
|
|
||||||
|
menuentry '1) UEFI Standard Controller' {
|
||||||
|
linuxefi rel-xxxSW_VERSIONxxx/installer-bzImage bootifonly=1 devfs=nomount inst.repo=http://pxecontroller/feed/rel-xxxSW_VERSIONxxx/ inst.ks=http://pxecontroller/feed/rel-xxxSW_VERSIONxxx/net_controller_ks.cfg usbcore.autosuspend=-1 biosdevname=0 rd.net.timeout.dhcp=120 ksdevice=$net_default_mac BOOTIF=$net_default_mac xxxAPPEND_OPTIONSxxx
|
||||||
|
initrdefi rel-xxxSW_VERSIONxxx/installer-initrd
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
default=0
|
||||||
|
timeout=10
|
||||||
|
GRUB_HIDDEN_TIMEOUT=0
|
||||||
|
GRUB_TIMEOUT_STYLE='countdown'
|
||||||
|
|
||||||
|
menuentry '1) UEFI All-in-one' {
|
||||||
|
linuxefi rel-xxxSW_VERSIONxxx/installer-bzImage bootifonly=1 devfs=nomount inst.repo=http://pxecontroller/feed/rel-xxxSW_VERSIONxxx/ inst.ks=http://pxecontroller/feed/rel-xxxSW_VERSIONxxx/net_smallsystem_ks.cfg usbcore.autosuspend=-1 biosdevname=0 rd.net.timeout.dhcp=120 ksdevice=$net_default_mac BOOTIF=$net_default_mac xxxAPPEND_OPTIONSxxx
|
||||||
|
initrdefi rel-xxxSW_VERSIONxxx/installer-initrd
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
default=0
|
||||||
|
timeout=10
|
||||||
|
GRUB_HIDDEN_TIMEOUT=0
|
||||||
|
GRUB_TIMEOUT_STYLE='countdown'
|
||||||
|
|
||||||
|
menuentry '1) UEFI All-in-one (lowlatency)' {
|
||||||
|
linuxefi rel-xxxSW_VERSIONxxx/installer-bzImage bootifonly=1 devfs=nomount inst.repo=http://pxecontroller/feed/rel-xxxSW_VERSIONxxx/ inst.ks=http://pxecontroller/feed/rel-xxxSW_VERSIONxxx/net_smallsystem_lowlatency_ks.cfg usbcore.autosuspend=-1 biosdevname=0 rd.net.timeout.dhcp=120 ksdevice=$net_default_mac BOOTIF=$net_default_mac xxxAPPEND_OPTIONSxxx
|
||||||
|
initrdefi rel-xxxSW_VERSIONxxx/installer-initrd
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
default=0
|
||||||
|
timeout=10
|
||||||
|
GRUB_HIDDEN_TIMEOUT=0
|
||||||
|
GRUB_TIMEOUT_STYLE='countdown'
|
||||||
|
|
||||||
|
menuentry '1) UEFI Storage' {
|
||||||
|
linuxefi rel-xxxSW_VERSIONxxx/installer-bzImage bootifonly=1 devfs=nomount inst.repo=http://pxecontroller/feed/rel-xxxSW_VERSIONxxx/ inst.ks=http://pxecontroller/feed/rel-xxxSW_VERSIONxxx/net_storage_ks.cfg usbcore.autosuspend=-1 biosdevname=0 rd.net.timeout.dhcp=120 ksdevice=$net_default_mac BOOTIF=$net_default_mac xxxAPPEND_OPTIONSxxx
|
||||||
|
initrdefi rel-xxxSW_VERSIONxxx/installer-initrd
|
||||||
|
}
|
56
installer/pxe-network-installer/pxe-network-installer/pxe-grub.cfg
Executable file
56
installer/pxe-network-installer/pxe-network-installer/pxe-grub.cfg
Executable file
@ -0,0 +1,56 @@
|
|||||||
|
default=0
|
||||||
|
|
||||||
|
# If the default menu fails then menu entry 5 is used.
|
||||||
|
fallback=5
|
||||||
|
|
||||||
|
timeout=10
|
||||||
|
GRUB_HIDDEN_TIMEOUT=0
|
||||||
|
GRUB_TIMEOUT_STYLE='countdown'
|
||||||
|
|
||||||
|
mac=$net_default_mac
|
||||||
|
|
||||||
|
# net_default_mac is the network interface that was used to load grub.
|
||||||
|
# We need to convert from 01:00:1e:67:56:9d:c1 to 01-00-1e-67-56-9d-c1 to
|
||||||
|
# match the config file format.
|
||||||
|
|
||||||
|
regexp --set=new '(^..)' "$mac"
|
||||||
|
conf=$new
|
||||||
|
regexp --set=new '^.{3}(.{2})' "$mac"
|
||||||
|
conf=$conf-$new
|
||||||
|
regexp --set=new '^.{6}(.{2})' "$mac"
|
||||||
|
conf=$conf-$new
|
||||||
|
regexp --set=new '^.{9}(.{2})' "$mac"
|
||||||
|
conf=$conf-$new
|
||||||
|
regexp --set=new '^.{12}(.{2})' "$mac"
|
||||||
|
conf=$conf-$new
|
||||||
|
regexp --set=new '^.{15}(.{2})' "$mac"
|
||||||
|
conf=$conf-$new
|
||||||
|
|
||||||
|
# First try to load the mac config, if it does not exist yet (its created when a
|
||||||
|
# personality is assigned to a node) then grub.conf is loaded again. We timeout
|
||||||
|
# for 10 sec between re-tries.
|
||||||
|
|
||||||
|
# Menu 0
|
||||||
|
menuentry 'Waiting for this node to be configured.' {
|
||||||
|
insmod net
|
||||||
|
insmod efinet
|
||||||
|
configfile pxelinux.cfg/efi-01-$conf
|
||||||
|
}
|
||||||
|
menuentry ' ' {
|
||||||
|
echo " "
|
||||||
|
}
|
||||||
|
menuentry 'Please configure the personality for this node from the' {
|
||||||
|
echo " "
|
||||||
|
}
|
||||||
|
menuentry 'controller node in order to proceed.' {
|
||||||
|
echo " "
|
||||||
|
}
|
||||||
|
menuentry ' ' {
|
||||||
|
echo " "
|
||||||
|
}
|
||||||
|
# Menu 5
|
||||||
|
menuentry 'Node not configured.' {
|
||||||
|
insmod net
|
||||||
|
insmod efinet
|
||||||
|
configfile grub.cfg
|
||||||
|
}
|
70
installer/pxe-network-installer/pxe-network-installer/pxe-grub.cfg.static
Executable file
70
installer/pxe-network-installer/pxe-network-installer/pxe-grub.cfg.static
Executable file
@ -0,0 +1,70 @@
|
|||||||
|
default=0
|
||||||
|
|
||||||
|
# If the default menu fails then menu entry 8 is used.
|
||||||
|
fallback=8
|
||||||
|
|
||||||
|
timeout=10
|
||||||
|
GRUB_HIDDEN_TIMEOUT=0
|
||||||
|
GRUB_TIMEOUT_STYLE='countdown'
|
||||||
|
|
||||||
|
mac=$net_default_mac
|
||||||
|
|
||||||
|
# net_default_mac is the network interface that was used to load grub.
|
||||||
|
# We need to convert from 01:00:1e:67:56:9d:c1 to 01-00-1e-67-56-9d-c1 to
|
||||||
|
# match the config file format.
|
||||||
|
|
||||||
|
regexp --set=new '(^..)' "$mac"
|
||||||
|
conf=$new
|
||||||
|
regexp --set=new '^.{3}(.{2})' "$mac"
|
||||||
|
conf=$conf-$new
|
||||||
|
regexp --set=new '^.{6}(.{2})' "$mac"
|
||||||
|
conf=$conf-$new
|
||||||
|
regexp --set=new '^.{9}(.{2})' "$mac"
|
||||||
|
conf=$conf-$new
|
||||||
|
regexp --set=new '^.{12}(.{2})' "$mac"
|
||||||
|
conf=$conf-$new
|
||||||
|
regexp --set=new '^.{15}(.{2})' "$mac"
|
||||||
|
conf=$conf-$new
|
||||||
|
|
||||||
|
# First try to load the mac config, if it does not exist yet (its created when a
|
||||||
|
# personality is assigned to a node) then grub.conf is loaded again. We timeout
|
||||||
|
# for 10 sec between re-tries.
|
||||||
|
|
||||||
|
# Menu 0
|
||||||
|
menuentry 'Waiting for this node to be configured.' {
|
||||||
|
insmod net
|
||||||
|
insmod efinet
|
||||||
|
configfile pxelinux.cfg/efi-01-$conf
|
||||||
|
}
|
||||||
|
menuentry ' ' {
|
||||||
|
echo " "
|
||||||
|
}
|
||||||
|
menuentry 'This system has been configured with static management' {
|
||||||
|
echo " "
|
||||||
|
}
|
||||||
|
menuentry 'and infrastructure IP address allocation. This requires' {
|
||||||
|
echo " "
|
||||||
|
}
|
||||||
|
menuentry 'that the node be manually provisioned in System' {
|
||||||
|
echo " "
|
||||||
|
}
|
||||||
|
menuentry "Inventory using the 'system host-add' CLI, GUI, or" {
|
||||||
|
echo " "
|
||||||
|
}
|
||||||
|
|
||||||
|
# Menu 6
|
||||||
|
menuentry 'sysinv-api equivalent.' {
|
||||||
|
echo " "
|
||||||
|
}
|
||||||
|
|
||||||
|
# Menu 7
|
||||||
|
menuentry ' ' {
|
||||||
|
echo " "
|
||||||
|
}
|
||||||
|
|
||||||
|
# Menu 8
|
||||||
|
menuentry 'Node not configured.' {
|
||||||
|
insmod net
|
||||||
|
insmod efinet
|
||||||
|
configfile grub.cfg
|
||||||
|
}
|
172
installer/pxe-network-installer/pxe-network-installer/pxeboot-update.sh
Executable file
172
installer/pxe-network-installer/pxe-network-installer/pxeboot-update.sh
Executable file
@ -0,0 +1,172 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Copyright (c) 2016-2017 Wind River Systems, Inc.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# Using a specified template, generate a node-specific pxeboot.cfg file
|
||||||
|
# for BIOS and UEFI mode. This script logs to user.log
|
||||||
|
#
|
||||||
|
# Command example;
|
||||||
|
# /usr/sbin/pxeboot-update-18.03.sh -i /pxeboot/pxelinux.cfg.files/pxe-controller-install-18.03
|
||||||
|
# -o /pxeboot/pxelinux.cfg/01-08-00-27-3e-f8-05 -b sda -r sda -t -c ttyS0,115200
|
||||||
|
#
|
||||||
|
|
||||||
|
function usage()
|
||||||
|
{
|
||||||
|
cat >&2 <<EOF
|
||||||
|
$0: This utility is used to generate a node-specific pxeboot.cfg file
|
||||||
|
|
||||||
|
Arguments:
|
||||||
|
-i <input template> : Specify template to use
|
||||||
|
-o <output file> : Specify output filename
|
||||||
|
-t : Use text install (optional)
|
||||||
|
-g : Use graphical install (optional)
|
||||||
|
-c <console> : Specify serial console (optional)
|
||||||
|
-b <boot device> : Specify boot device
|
||||||
|
-r <rootfs device> : Specify rootfs device
|
||||||
|
-u <tisnotify url> : Base url for TIS install progress notification
|
||||||
|
-s <mode> : Specify Security Profile mode (optional)
|
||||||
|
-T <tboot value> : Specify whether or not to use tboot (optional)
|
||||||
|
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
declare text_install="inst.text"
|
||||||
|
|
||||||
|
function generate_config()
|
||||||
|
{
|
||||||
|
input=$1
|
||||||
|
output=$2
|
||||||
|
|
||||||
|
if [ ! -f "$input" ]
|
||||||
|
then
|
||||||
|
logger --stderr -t $0 "Error: Input file $input does not exist"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -w $(dirname $output) ]
|
||||||
|
then
|
||||||
|
logger --stderr -t $0 "Error: Destination directory $(dirname $output) not writeable"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -e $output -a ! -w $output ]
|
||||||
|
then
|
||||||
|
logger --stderr -t $0 "Error: Destination file $output_file_efi exists and is not writeable"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
sed -e "s#xxxAPPEND_OPTIONSxxx#$APPEND_OPTIONS#" $input > $output
|
||||||
|
|
||||||
|
if [ $? -ne 0 -o ! -f $output ]
|
||||||
|
then
|
||||||
|
logger --stderr -t $0 "Error: Failed to generate pxeboot file $output"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
parms=$@
|
||||||
|
logger -t $0 " $parms"
|
||||||
|
|
||||||
|
while getopts "i:o:tgc:b:r:u:s:T:h" opt
|
||||||
|
do
|
||||||
|
case $opt in
|
||||||
|
i)
|
||||||
|
input_file=$OPTARG
|
||||||
|
input_file_efi=$(dirname $input_file)/efi-$(basename $input_file)
|
||||||
|
;;
|
||||||
|
o)
|
||||||
|
output_file=$OPTARG
|
||||||
|
output_file_efi=$(dirname $output_file)/efi-$(basename $output_file)
|
||||||
|
;;
|
||||||
|
t)
|
||||||
|
text_install="inst.text"
|
||||||
|
;;
|
||||||
|
g)
|
||||||
|
# We currently do not support Graphics install with Centos. Enforce
|
||||||
|
# the text install.
|
||||||
|
# text_install="inst.graphical"
|
||||||
|
text_install="inst.text"
|
||||||
|
;;
|
||||||
|
c)
|
||||||
|
console=$OPTARG
|
||||||
|
;;
|
||||||
|
b)
|
||||||
|
boot_device=$OPTARG
|
||||||
|
;;
|
||||||
|
r)
|
||||||
|
rootfs_device=$OPTARG
|
||||||
|
;;
|
||||||
|
u)
|
||||||
|
tisnotify=$OPTARG
|
||||||
|
;;
|
||||||
|
s)
|
||||||
|
security_profile=$OPTARG
|
||||||
|
;;
|
||||||
|
T)
|
||||||
|
tboot=$OPTARG
|
||||||
|
;;
|
||||||
|
h)
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Validate parameters
|
||||||
|
if [ -z "$input_file" \
|
||||||
|
-o -z "$input_file_efi" \
|
||||||
|
-o -z "$output_file" \
|
||||||
|
-o -z "$output_file_efi" \
|
||||||
|
-o -z "$boot_device" \
|
||||||
|
-o -z "$rootfs_device" ]
|
||||||
|
then
|
||||||
|
logger --stderr -t $0 "Error: One or more mandatory options not specified: $@"
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
APPEND_OPTIONS="boot_device=$boot_device rootfs_device=$rootfs_device"
|
||||||
|
|
||||||
|
if [ -n "$text_install" ]
|
||||||
|
then
|
||||||
|
APPEND_OPTIONS="$APPEND_OPTIONS $text_install"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$console" ]
|
||||||
|
then
|
||||||
|
APPEND_OPTIONS="$APPEND_OPTIONS console=$console"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$tisnotify" ]
|
||||||
|
then
|
||||||
|
APPEND_OPTIONS="$APPEND_OPTIONS tisnotify=$tisnotify"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# We now require GPT partitions for all disks regardless of size
|
||||||
|
APPEND_OPTIONS="$APPEND_OPTIONS inst.gpt"
|
||||||
|
|
||||||
|
if [ -n "$security_profile" ]
|
||||||
|
then
|
||||||
|
APPEND_OPTIONS="$APPEND_OPTIONS security_profile=$security_profile"
|
||||||
|
fi
|
||||||
|
|
||||||
|
generate_config $input_file $output_file
|
||||||
|
|
||||||
|
# for extended security profile UEFI boot only,
|
||||||
|
# a tboot option will be passed to target boot option menu
|
||||||
|
if [ "$security_profile" == "extended" -a -n "$tboot" ]
|
||||||
|
then
|
||||||
|
APPEND_OPTIONS="$APPEND_OPTIONS tboot=$tboot"
|
||||||
|
fi
|
||||||
|
|
||||||
|
generate_config $input_file_efi $output_file_efi
|
||||||
|
|
||||||
|
exit 0
|
202
kickstart/LICENSE
Executable file
202
kickstart/LICENSE
Executable file
@ -0,0 +1,202 @@
|
|||||||
|
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
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.
|
3
kickstart/centos/build_srpm.data
Normal file
3
kickstart/centos/build_srpm.data
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
SRC_DIR="${CGCS_BASE}/mwa-beas/bsp-files"
|
||||||
|
COPY_LIST="$PKG_BASE/LICENSE"
|
||||||
|
TIS_PATCH_VER=0
|
64
kickstart/centos/platform-kickstarts.spec
Normal file
64
kickstart/centos/platform-kickstarts.spec
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
Name: platform-kickstarts
|
||||||
|
Version: 1.0.0
|
||||||
|
Release: %{tis_patch_ver}%{?_tis_dist}
|
||||||
|
Summary: Platform Kickstarts
|
||||||
|
License: Apache-2.0
|
||||||
|
Packager: Wind River <info@windriver.com>
|
||||||
|
URL: unknown
|
||||||
|
|
||||||
|
Source0: %{name}-%{version}.tar.gz
|
||||||
|
Source1: LICENSE
|
||||||
|
|
||||||
|
BuildArch: noarch
|
||||||
|
|
||||||
|
%description
|
||||||
|
Platform kickstart files
|
||||||
|
|
||||||
|
BuildRequires: perl
|
||||||
|
BuildRequires: perl(Getopt::Long)
|
||||||
|
BuildRequires: perl(POSIX)
|
||||||
|
|
||||||
|
%define feed_dir /www/pages/feed/rel-%{platform_release}
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup
|
||||||
|
|
||||||
|
%build
|
||||||
|
./centos-ks-gen.pl --release %{platform_release}
|
||||||
|
cp %{SOURCE1} .
|
||||||
|
|
||||||
|
%install
|
||||||
|
|
||||||
|
install -d -m 0755 %{buildroot}%{feed_dir}
|
||||||
|
install -m 0444 generated/* %{buildroot}%{feed_dir}/
|
||||||
|
|
||||||
|
install -d -m 0755 %{buildroot}/pxeboot
|
||||||
|
install -D -m 0444 pxeboot/* %{buildroot}/pxeboot
|
||||||
|
|
||||||
|
install -d -m 0755 %{buildroot}/extra_cfgs
|
||||||
|
install -D -m 0444 extra_cfgs/* %{buildroot}/extra_cfgs
|
||||||
|
|
||||||
|
%files
|
||||||
|
%defattr(-,root,root,-)
|
||||||
|
%license LICENSE
|
||||||
|
%{feed_dir}
|
||||||
|
|
||||||
|
%package pxeboot
|
||||||
|
Summary: Kickstarts for pxeboot server
|
||||||
|
|
||||||
|
%description pxeboot
|
||||||
|
Kickstarts for pxeboot server
|
||||||
|
|
||||||
|
%files pxeboot
|
||||||
|
%defattr(-,root,root,-)
|
||||||
|
/pxeboot/
|
||||||
|
|
||||||
|
%package extracfgs
|
||||||
|
Summary: Extra lab-usage kickstarts
|
||||||
|
|
||||||
|
%description extracfgs
|
||||||
|
Extra lab-usage kickstarts
|
||||||
|
|
||||||
|
%files extracfgs
|
||||||
|
%defattr(-,root,root,-)
|
||||||
|
/extra_cfgs/
|
202
mtce-common/LICENSE
Normal file
202
mtce-common/LICENSE
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
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.
|
16
mtce-common/PKG-INFO
Normal file
16
mtce-common/PKG-INFO
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
Metadata-Version: 1.1
|
||||||
|
Name: cgts-mtce-common
|
||||||
|
Version: 1.0
|
||||||
|
Summary: Titanium Cloud Platform Common Node Maintenance Package
|
||||||
|
Home-page:
|
||||||
|
Author: Windriver
|
||||||
|
Author-email: info@windriver.com
|
||||||
|
License: Apache-2.0
|
||||||
|
|
||||||
|
Description: Maintenance common package containing host maintenace and heatbeat
|
||||||
|
agent/client daemons as well as the hardware and process monitor
|
||||||
|
daemons, hardware watchdog process, guest heartbeat agent/client
|
||||||
|
daemons, resource and file system daemons as well as initialization
|
||||||
|
and support files for each.
|
||||||
|
|
||||||
|
Platform: UNKNOWN
|
3
mtce-common/centos/build_srpm.data
Normal file
3
mtce-common/centos/build_srpm.data
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
SRC_DIR="cgts-mtce-common-1.0"
|
||||||
|
TIS_PATCH_VER=133
|
||||||
|
BUILD_IS_SLOW=5
|
768
mtce-common/centos/cgts-mtce-common.spec
Normal file
768
mtce-common/centos/cgts-mtce-common.spec
Normal file
@ -0,0 +1,768 @@
|
|||||||
|
Summary: Titanuim Server Common Maintenance Package
|
||||||
|
Name: cgts-mtce-common
|
||||||
|
Version: 1.0
|
||||||
|
Release: %{tis_patch_ver}%{?_tis_dist}
|
||||||
|
License: Apache-2.0
|
||||||
|
Group: base
|
||||||
|
Packager: Wind River <info@windriver.com>
|
||||||
|
URL: unknown
|
||||||
|
|
||||||
|
Source0: %{name}-%{version}.tar.gz
|
||||||
|
|
||||||
|
BuildRequires: libssh2
|
||||||
|
BuildRequires: libssh2-devel
|
||||||
|
BuildRequires: json-c
|
||||||
|
BuildRequires: json-c-devel
|
||||||
|
BuildRequires: fm-common
|
||||||
|
BuildRequires: fm-common-dev
|
||||||
|
BuildRequires: openssl
|
||||||
|
BuildRequires: openssl-devel
|
||||||
|
BuildRequires: libevent
|
||||||
|
BuildRequires: libevent-devel
|
||||||
|
BuildRequires: fm-mgr
|
||||||
|
BuildRequires: expect
|
||||||
|
BuildRequires: postgresql
|
||||||
|
BuildRequires: libuuid-devel
|
||||||
|
BuildRequires: guest-client-devel
|
||||||
|
BuildRequires: systemd-devel
|
||||||
|
BuildRequires: cppcheck
|
||||||
|
Requires: util-linux
|
||||||
|
Requires: /bin/bash
|
||||||
|
Requires: /bin/systemctl
|
||||||
|
Requires: dpkg
|
||||||
|
Requires: time
|
||||||
|
Requires: cgts-mtce-common-rmon >= 1.0
|
||||||
|
Requires: libevent-2.0.so.5()(64bit)
|
||||||
|
Requires: expect
|
||||||
|
Requires: libfmcommon.so.1()(64bit)
|
||||||
|
Requires: libstdc++.so.6(GLIBCXX_3.4.14)(64bit)
|
||||||
|
Requires: libstdc++.so.6(GLIBCXX_3.4.9)(64bit)
|
||||||
|
Requires: fm-common >= 1.0
|
||||||
|
Requires: libamon.so.1()(64bit)
|
||||||
|
Requires: libc.so.6(GLIBC_2.2.5)(64bit)
|
||||||
|
Requires: libstdc++.so.6(GLIBCXX_3.4.11)(64bit)
|
||||||
|
Requires: /bin/sh
|
||||||
|
Requires: cgts-mtce-common-pmon >= 1.0
|
||||||
|
Requires: librt.so.1()(64bit)
|
||||||
|
Requires: libc.so.6(GLIBC_2.3)(64bit)
|
||||||
|
Requires: libc.so.6(GLIBC_2.14)(64bit)
|
||||||
|
Requires: libjson-c.so.2()(64bit)
|
||||||
|
Requires: libpthread.so.0(GLIBC_2.2.5)(64bit)
|
||||||
|
Requires: librmonapi.so.1()(64bit)
|
||||||
|
Requires: librt.so.1(GLIBC_2.3.3)(64bit)
|
||||||
|
Requires: libgcc_s.so.1(GCC_3.0)(64bit)
|
||||||
|
Requires: libstdc++.so.6(CXXABI_1.3)(64bit)
|
||||||
|
Requires: libevent >= 2.0.21
|
||||||
|
Requires: librt.so.1(GLIBC_2.2.5)(64bit)
|
||||||
|
Requires: libuuid.so.1()(64bit)
|
||||||
|
Requires: libm.so.6()(64bit)
|
||||||
|
Requires: rtld(GNU_HASH)
|
||||||
|
Requires: libstdc++.so.6()(64bit)
|
||||||
|
Requires: libc.so.6(GLIBC_2.4)(64bit)
|
||||||
|
Requires: libc.so.6()(64bit)
|
||||||
|
Requires: libssh2.so.1()(64bit)
|
||||||
|
Requires: libgcc_s.so.1()(64bit)
|
||||||
|
Requires: libstdc++.so.6(GLIBCXX_3.4)(64bit)
|
||||||
|
Requires: libstdc++.so.6(GLIBCXX_3.4.15)(64bit)
|
||||||
|
Requires: libpthread.so.0()(64bit)
|
||||||
|
Requires: /usr/bin/expect
|
||||||
|
Requires: python-rtslib
|
||||||
|
|
||||||
|
%description
|
||||||
|
Titanium Cloud Host Maintenance services. A suite of daemons that provide
|
||||||
|
host maintainability and a high level of fault detection with automatic
|
||||||
|
notification and recovery.The Maintenance Service (mtcAgent/mtcClient)
|
||||||
|
manages hosts according to an abbreviated version of the CCITT X.731 ITU
|
||||||
|
specification. The Heartbeat Service (hbsAgent/hbsClient) adds fast failure
|
||||||
|
detection over the management and infstructure networks. The Process
|
||||||
|
Monitor service (pmond) add both passive and active process monitoring and
|
||||||
|
automatic recovery of stopped or killed processes. The File System Monitor
|
||||||
|
Service (fsmond) adds detection and reporting of local file system
|
||||||
|
problems. The Hardware Monitor Service (hwmond) adds present and predictive
|
||||||
|
hardware failure detection, reporting and recovery. The Resource Monitor
|
||||||
|
Service (rmond) adds resource monitoring with present and predictive
|
||||||
|
failure and overload detection and reporting. The Guest Services
|
||||||
|
(guestAgent/guestServer) daemons control access into and heartbeat of guest
|
||||||
|
VMs on the compute. The Host Watchdog (hostwd) daemon watches for errors in
|
||||||
|
pmond and logs system information on error. All of these maintenance
|
||||||
|
services improve MTTD of node failures as well as resource overload and out
|
||||||
|
of spec operating conditions that can reduce outage time through automated
|
||||||
|
notification and recovery thereby improving overall platform availability
|
||||||
|
for the customer.
|
||||||
|
|
||||||
|
%package -n cgts-mtce-common-pmon
|
||||||
|
Summary: Titanuim Server Maintenance Process Monitor Package
|
||||||
|
Group: base
|
||||||
|
BuildRequires: cppcheck
|
||||||
|
Requires: util-linux
|
||||||
|
Requires: /bin/bash
|
||||||
|
Requires: /bin/systemctl
|
||||||
|
Requires: dpkg
|
||||||
|
Requires: time
|
||||||
|
Requires: libstdc++.so.6(CXXABI_1.3)(64bit)
|
||||||
|
Requires: libfmcommon.so.1()(64bit)
|
||||||
|
Requires: libc.so.6(GLIBC_2.7)(64bit)
|
||||||
|
Requires: fm-common >= 1.0
|
||||||
|
Requires: libc.so.6(GLIBC_2.2.5)(64bit)
|
||||||
|
Requires: libstdc++.so.6(GLIBCXX_3.4.11)(64bit)
|
||||||
|
Requires: /bin/sh
|
||||||
|
Requires: librt.so.1()(64bit)
|
||||||
|
Requires: libc.so.6(GLIBC_2.3)(64bit)
|
||||||
|
Requires: libc.so.6(GLIBC_2.14)(64bit)
|
||||||
|
Requires: libpthread.so.0(GLIBC_2.2.5)(64bit)
|
||||||
|
Requires: librt.so.1(GLIBC_2.3.3)(64bit)
|
||||||
|
Requires: libgcc_s.so.1(GCC_3.0)(64bit)
|
||||||
|
Requires: librt.so.1(GLIBC_2.2.5)(64bit)
|
||||||
|
Requires: libm.so.6()(64bit)
|
||||||
|
Requires: rtld(GNU_HASH)
|
||||||
|
Requires: libstdc++.so.6()(64bit)
|
||||||
|
Requires: libc.so.6(GLIBC_2.4)(64bit)
|
||||||
|
Requires: libc.so.6()(64bit)
|
||||||
|
Requires: libgcc_s.so.1()(64bit)
|
||||||
|
Requires: libstdc++.so.6(GLIBCXX_3.4)(64bit)
|
||||||
|
Requires: libstdc++.so.6(GLIBCXX_3.4.15)(64bit)
|
||||||
|
Requires: libpthread.so.0()(64bit)
|
||||||
|
Provides: libamon.so.1()(64bit)
|
||||||
|
|
||||||
|
%description -n cgts-mtce-common-pmon
|
||||||
|
Titanium Cloud Maintenance Process Monitor service (pmond) with
|
||||||
|
passive (pid), active (msg) and status (qry) process monitoring with
|
||||||
|
automatic recovery and failure reporting of registered failed processes.
|
||||||
|
|
||||||
|
%package -n cgts-mtce-common-rmon
|
||||||
|
Summary: Titanuim Server Maintenance Resource Monitor Package
|
||||||
|
Group: base
|
||||||
|
Requires: /bin/bash
|
||||||
|
Requires: util-linux
|
||||||
|
Requires: /bin/systemctl
|
||||||
|
Requires: dpkg
|
||||||
|
Requires: time
|
||||||
|
Requires: libjson-c.so.2()(64bit)
|
||||||
|
Requires: libstdc++.so.6(CXXABI_1.3)(64bit)
|
||||||
|
Requires: libevent-2.0.so.5()(64bit)
|
||||||
|
Requires: libfmcommon.so.1()(64bit)
|
||||||
|
Requires: librmonapi.so.1()(64bit)
|
||||||
|
Requires: fm-common >= 1.0
|
||||||
|
Requires: libc.so.6(GLIBC_2.2.5)(64bit)
|
||||||
|
Requires: libstdc++.so.6(GLIBCXX_3.4.11)(64bit)
|
||||||
|
Requires: /bin/sh
|
||||||
|
Requires: librt.so.1()(64bit)
|
||||||
|
Requires: libc.so.6(GLIBC_2.3)(64bit)
|
||||||
|
Requires: libc.so.6(GLIBC_2.14)(64bit)
|
||||||
|
Requires: libpthread.so.0(GLIBC_2.2.5)(64bit)
|
||||||
|
Requires: librt.so.1(GLIBC_2.3.3)(64bit)
|
||||||
|
Requires: libgcc_s.so.1(GCC_3.0)(64bit)
|
||||||
|
Requires: libevent >= 2.0.21
|
||||||
|
Requires: librt.so.1(GLIBC_2.2.5)(64bit)
|
||||||
|
Requires: libuuid.so.1()(64bit)
|
||||||
|
Requires: libm.so.6()(64bit)
|
||||||
|
Requires: rtld(GNU_HASH)
|
||||||
|
Requires: libstdc++.so.6()(64bit)
|
||||||
|
Requires: libc.so.6()(64bit)
|
||||||
|
Requires: libgcc_s.so.1()(64bit)
|
||||||
|
Requires: libstdc++.so.6(GLIBCXX_3.4)(64bit)
|
||||||
|
Requires: libstdc++.so.6(GLIBCXX_3.4.15)(64bit)
|
||||||
|
Requires: libpthread.so.0()(64bit)
|
||||||
|
Provides: librmonapi.so.1()(64bit)
|
||||||
|
|
||||||
|
%description -n cgts-mtce-common-rmon
|
||||||
|
Titanium Cloud Host Maintenance Resource Monitor Service (rmond) adds
|
||||||
|
threshold based monitoring with predictive severity level alarming for
|
||||||
|
out of tolerance utilization of critical resourses such as memory, cpu
|
||||||
|
file system, interface state, etc.
|
||||||
|
|
||||||
|
%package -n cgts-mtce-common-hwmon
|
||||||
|
Summary: Titanuim Server Maintenance Hardware Monitor Package
|
||||||
|
Group: base
|
||||||
|
Requires: dpkg
|
||||||
|
Requires: time
|
||||||
|
Requires: /bin/bash
|
||||||
|
Requires: libjson-c.so.2()(64bit)
|
||||||
|
Requires: libstdc++.so.6(CXXABI_1.3)(64bit)
|
||||||
|
Requires: librt.so.1(GLIBC_2.2.5)(64bit)
|
||||||
|
Requires: libfmcommon.so.1()(64bit)
|
||||||
|
Requires: libstdc++.so.6(GLIBCXX_3.4.14)(64bit)
|
||||||
|
Requires: libstdc++.so.6(GLIBCXX_3.4.9)(64bit)
|
||||||
|
Requires: fm-common >= 1.0
|
||||||
|
Requires: libc.so.6(GLIBC_2.2.5)(64bit)
|
||||||
|
Requires: libstdc++.so.6(GLIBCXX_3.4.11)(64bit)
|
||||||
|
Requires: /bin/sh
|
||||||
|
Requires: librt.so.1()(64bit)
|
||||||
|
Requires: libc.so.6(GLIBC_2.3)(64bit)
|
||||||
|
Requires: libc.so.6(GLIBC_2.14)(64bit)
|
||||||
|
Requires: libpthread.so.0(GLIBC_2.2.5)(64bit)
|
||||||
|
Requires: librt.so.1(GLIBC_2.3.3)(64bit)
|
||||||
|
Requires: libgcc_s.so.1(GCC_3.0)(64bit)
|
||||||
|
Requires: libevent >= 2.0.21
|
||||||
|
Requires: libevent-2.0.so.5()(64bit)
|
||||||
|
Requires: libm.so.6()(64bit)
|
||||||
|
Requires: rtld(GNU_HASH)
|
||||||
|
Requires: libstdc++.so.6()(64bit)
|
||||||
|
Requires: libc.so.6()(64bit)
|
||||||
|
Requires: libssh2.so.1()(64bit)
|
||||||
|
Requires: libgcc_s.so.1()(64bit)
|
||||||
|
Requires: libstdc++.so.6(GLIBCXX_3.4)(64bit)
|
||||||
|
Requires: libstdc++.so.6(GLIBCXX_3.4.15)(64bit)
|
||||||
|
Requires: libpthread.so.0()(64bit)
|
||||||
|
|
||||||
|
%description -n cgts-mtce-common-hwmon
|
||||||
|
Titanium Cloud Host Maintenance Hardware Monitor Service (hwmond) adds
|
||||||
|
in and out of service hardware sensor monitoring, alarming and recovery
|
||||||
|
handling.
|
||||||
|
|
||||||
|
%package -n cgts-mtce-common-guestAgent
|
||||||
|
Summary: Titanuim Server Maintenance Guest Agent Package
|
||||||
|
Group: base
|
||||||
|
Requires: dpkg
|
||||||
|
Requires: time
|
||||||
|
Requires: libjson-c.so.2()(64bit)
|
||||||
|
Requires: libstdc++.so.6(CXXABI_1.3)(64bit)
|
||||||
|
Requires: librt.so.1(GLIBC_2.2.5)(64bit)
|
||||||
|
Requires: libfmcommon.so.1()(64bit)
|
||||||
|
Requires: libstdc++.so.6(GLIBCXX_3.4.9)(64bit)
|
||||||
|
Requires: fm-common >= 1.0
|
||||||
|
Requires: libc.so.6(GLIBC_2.2.5)(64bit)
|
||||||
|
Requires: libstdc++.so.6(GLIBCXX_3.4.11)(64bit)
|
||||||
|
Requires: /bin/sh
|
||||||
|
Requires: librt.so.1()(64bit)
|
||||||
|
Requires: libc.so.6(GLIBC_2.3)(64bit)
|
||||||
|
Requires: libc.so.6(GLIBC_2.14)(64bit)
|
||||||
|
Requires: libpthread.so.0(GLIBC_2.2.5)(64bit)
|
||||||
|
Requires: librt.so.1(GLIBC_2.3.3)(64bit)
|
||||||
|
Requires: libgcc_s.so.1(GCC_3.0)(64bit)
|
||||||
|
Requires: libevent >= 2.0.21
|
||||||
|
Requires: libevent-2.0.so.5()(64bit)
|
||||||
|
Requires: libuuid.so.1()(64bit)
|
||||||
|
Requires: libm.so.6()(64bit)
|
||||||
|
Requires: rtld(GNU_HASH)
|
||||||
|
Requires: libstdc++.so.6()(64bit)
|
||||||
|
Requires: libc.so.6()(64bit)
|
||||||
|
Requires: libgcc_s.so.1()(64bit)
|
||||||
|
Requires: libstdc++.so.6(GLIBCXX_3.4)(64bit)
|
||||||
|
Requires: libstdc++.so.6(GLIBCXX_3.4.15)(64bit)
|
||||||
|
Requires: libpthread.so.0()(64bit)
|
||||||
|
|
||||||
|
%description -n cgts-mtce-common-guestAgent
|
||||||
|
Titanium Cloud Host Maintenance Guest Agent Service assists in
|
||||||
|
VM guest heartbeat control and failure reporting at the controller
|
||||||
|
level.
|
||||||
|
|
||||||
|
%package -n cgts-mtce-common-guestServer
|
||||||
|
Summary: Titanuim Server Maintenance Guest Server Package
|
||||||
|
Group: base
|
||||||
|
Requires: util-linux
|
||||||
|
Requires: /bin/bash
|
||||||
|
Requires: /bin/systemctl
|
||||||
|
Requires: dpkg
|
||||||
|
Requires: libjson-c.so.2()(64bit)
|
||||||
|
Requires: libstdc++.so.6(CXXABI_1.3)(64bit)
|
||||||
|
Requires: librt.so.1(GLIBC_2.2.5)(64bit)
|
||||||
|
Requires: libfmcommon.so.1()(64bit)
|
||||||
|
Requires: libstdc++.so.6(GLIBCXX_3.4.9)(64bit)
|
||||||
|
Requires: fm-common >= 1.0
|
||||||
|
Requires: libc.so.6(GLIBC_2.2.5)(64bit)
|
||||||
|
Requires: libstdc++.so.6(GLIBCXX_3.4.11)(64bit)
|
||||||
|
Requires: /bin/sh
|
||||||
|
Requires: librt.so.1()(64bit)
|
||||||
|
Requires: libc.so.6(GLIBC_2.3)(64bit)
|
||||||
|
Requires: libc.so.6(GLIBC_2.14)(64bit)
|
||||||
|
Requires: libpthread.so.0(GLIBC_2.2.5)(64bit)
|
||||||
|
Requires: librt.so.1(GLIBC_2.3.3)(64bit)
|
||||||
|
Requires: libgcc_s.so.1(GCC_3.0)(64bit)
|
||||||
|
Requires: libevent >= 2.0.21
|
||||||
|
Requires: libevent-2.0.so.5()(64bit)
|
||||||
|
Requires: libuuid.so.1()(64bit)
|
||||||
|
Requires: libm.so.6()(64bit)
|
||||||
|
Requires: rtld(GNU_HASH)
|
||||||
|
Requires: libstdc++.so.6()(64bit)
|
||||||
|
Requires: libc.so.6(GLIBC_2.4)(64bit)
|
||||||
|
Requires: libc.so.6()(64bit)
|
||||||
|
Requires: libgcc_s.so.1()(64bit)
|
||||||
|
Requires: libstdc++.so.6(GLIBCXX_3.4)(64bit)
|
||||||
|
Requires: libstdc++.so.6(GLIBCXX_3.4.15)(64bit)
|
||||||
|
Requires: libpthread.so.0()(64bit)
|
||||||
|
|
||||||
|
%description -n cgts-mtce-common-guestServer
|
||||||
|
Titanium Cloud Maintenance Guest Server assists in VM guest
|
||||||
|
heartbeat control and failure reporting at the compute level.
|
||||||
|
|
||||||
|
%package -n cgts-mtce-common-hostw
|
||||||
|
Summary: Titanuim Server Common Maintenance Package
|
||||||
|
Group: base
|
||||||
|
Requires: util-linux
|
||||||
|
Requires: /bin/bash
|
||||||
|
Requires: /bin/systemctl
|
||||||
|
Requires: dpkg
|
||||||
|
Requires: libstdc++.so.6(CXXABI_1.3)(64bit)
|
||||||
|
Requires: libc.so.6(GLIBC_2.2.5)(64bit)
|
||||||
|
Requires: libstdc++.so.6(GLIBCXX_3.4.11)(64bit)
|
||||||
|
Requires: librt.so.1()(64bit)
|
||||||
|
Requires: libc.so.6(GLIBC_2.3)(64bit)
|
||||||
|
Requires: libpthread.so.0(GLIBC_2.2.5)(64bit)
|
||||||
|
Requires: librt.so.1(GLIBC_2.3.3)(64bit)
|
||||||
|
Requires: libgcc_s.so.1(GCC_3.0)(64bit)
|
||||||
|
Requires: librt.so.1(GLIBC_2.2.5)(64bit)
|
||||||
|
Requires: libm.so.6()(64bit)
|
||||||
|
Requires: rtld(GNU_HASH)
|
||||||
|
Requires: libstdc++.so.6()(64bit)
|
||||||
|
Requires: libc.so.6()(64bit)
|
||||||
|
Requires: libgcc_s.so.1()(64bit)
|
||||||
|
Requires: libstdc++.so.6(GLIBCXX_3.4)(64bit)
|
||||||
|
Requires: libstdc++.so.6(GLIBCXX_3.4.15)(64bit)
|
||||||
|
Requires: libpthread.so.0()(64bit)
|
||||||
|
|
||||||
|
%description -n cgts-mtce-common-hostw
|
||||||
|
Titanium Cloud Host Maintenance services. A suite of daemons that provide
|
||||||
|
host maintainability and a high level of fault detection with automatic
|
||||||
|
notification and recovery.The Maintenance Service (mtcAgent/mtcClient)
|
||||||
|
manages hosts according to an abbreviated version of the CCITT X.731 ITU
|
||||||
|
specification. The Heartbeat Service (hbsAgent/hbsClient) adds fast failure
|
||||||
|
detection over the management and infstructure networks. The Process
|
||||||
|
Monitor service (pmond) add both passive and active process monitoring and
|
||||||
|
automatic recovery of stopped or killed processes. The File System Monitor
|
||||||
|
Service (fsmond) adds detection and reporting of local file system
|
||||||
|
problems. The Hardware Monitor Service (hwmond) adds present and predictive
|
||||||
|
hardware failure detection, reporting and recovery. The Resource Monitor
|
||||||
|
Service (rmond) adds resource monitoring with present and predictive
|
||||||
|
failure and overload detection and reporting. The Guest Services
|
||||||
|
(guestAgent/guestServer) daemons control access into and heartbeat of guest
|
||||||
|
VMs on the compute. The Host Watchdog (hostwd) daemon watches for errors in
|
||||||
|
pmond and logs system information on error. All of these maintenance
|
||||||
|
services improve MTTD of node failures as well as resource overload and out
|
||||||
|
of spec operating conditions that can reduce outage time through automated
|
||||||
|
notification and recovery thereby improving overall platform availability
|
||||||
|
for the customer.
|
||||||
|
|
||||||
|
%define local_dir /usr/local
|
||||||
|
%define local_bindir %{local_dir}/bin
|
||||||
|
%define local_sbindir %{local_dir}/sbin
|
||||||
|
%define local_etc_pmond %{_sysconfdir}/pmon.d
|
||||||
|
%define local_etc_rmond %{_sysconfdir}/rmon.d
|
||||||
|
%define local_etc_goenabledd %{_sysconfdir}/goenabled.d
|
||||||
|
%define local_etc_servicesd %{_sysconfdir}/services.d
|
||||||
|
%define local_etc_logrotated %{_sysconfdir}/logrotate.d
|
||||||
|
%define bmc_profilesd %{_sysconfdir}/bmc/server_profiles.d
|
||||||
|
%define ocf_resourced /usr/lib/ocf/resource.d
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup
|
||||||
|
|
||||||
|
# Build for main cgts-mtce-common package
|
||||||
|
%build
|
||||||
|
VER=%{version}
|
||||||
|
MAJOR=`echo $VER | awk -F . '{print $1}'`
|
||||||
|
MINOR=`echo $VER | awk -F . '{print $2}'`
|
||||||
|
make MAJOR=$MAJOR MINOR=$MINOR %{?_smp_mflags} build
|
||||||
|
|
||||||
|
%global _buildsubdir %{_builddir}/%{name}-%{version}
|
||||||
|
|
||||||
|
# Install for main cgts-mtce-common package
|
||||||
|
%install
|
||||||
|
|
||||||
|
VER=%{version}
|
||||||
|
MAJOR=`echo $VER | awk -F . '{print $1}'`
|
||||||
|
MINOR=`echo $VER | awk -F . '{print $2}'`
|
||||||
|
|
||||||
|
install -m 755 -d %{buildroot}%{_sysconfdir}
|
||||||
|
install -m 755 -d %{buildroot}/usr
|
||||||
|
install -m 755 -d %{buildroot}/%{_bindir}
|
||||||
|
install -m 755 -d %{buildroot}/usr/local
|
||||||
|
install -m 755 -d %{buildroot}%{local_bindir}
|
||||||
|
install -m 755 -d %{buildroot}/usr/local/sbin
|
||||||
|
install -m 755 -d %{buildroot}/%{_sbindir}
|
||||||
|
install -m 755 -d %{buildroot}/lib
|
||||||
|
install -m 755 -d %{buildroot}%{_sysconfdir}/mtc
|
||||||
|
install -m 755 -d %{buildroot}%{_sysconfdir}/mtc/tmp
|
||||||
|
|
||||||
|
# Resource Agent Stuff
|
||||||
|
install -m 755 -d %{buildroot}/usr/lib
|
||||||
|
install -m 755 -d %{buildroot}/usr/lib/ocf
|
||||||
|
install -m 755 -d %{buildroot}/usr/lib/ocf/resource.d
|
||||||
|
install -m 755 -d %{buildroot}/usr/lib/ocf/resource.d/platform
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/scripts/mtcAgent %{buildroot}/usr/lib/ocf/resource.d/platform/mtcAgent
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/scripts/hbsAgent %{buildroot}/usr/lib/ocf/resource.d/platform/hbsAgent
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/hwmon/scripts/ocf/hwmon %{buildroot}/usr/lib/ocf/resource.d/platform/hwmon
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/guest/scripts/guestAgent.ocf %{buildroot}/usr/lib/ocf/resource.d/platform/guestAgent
|
||||||
|
|
||||||
|
# config files
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/scripts/mtc.ini %{buildroot}%{_sysconfdir}/mtc.ini
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/scripts/mtc.conf %{buildroot}%{_sysconfdir}/mtc.conf
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/fsmon/scripts/fsmond.conf %{buildroot}%{_sysconfdir}/mtc/fsmond.conf
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/hwmon/scripts/hwmond.conf %{buildroot}%{_sysconfdir}/mtc/hwmond.conf
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/pmon/scripts/pmond.conf %{buildroot}%{_sysconfdir}/mtc/pmond.conf
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/rmon/scripts/rmond.conf %{buildroot}%{_sysconfdir}/mtc/rmond.conf
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/guest/scripts/guest.ini %{buildroot}%{_sysconfdir}/mtc/guestAgent.ini
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/guest/scripts/guest.ini %{buildroot}%{_sysconfdir}/mtc/guestServer.ini
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/hostw/scripts/hostwd.conf %{buildroot}%{_sysconfdir}/mtc/hostwd.conf
|
||||||
|
|
||||||
|
install -m 755 -d %{buildroot}/%{_sysconfdir}/etc/bmc/server_profiles.d
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/scripts/sensor_hp360_v1_ilo_v4.profile %{buildroot}/%{_sysconfdir}/bmc/server_profiles.d/sensor_hp360_v1_ilo_v4.profile
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/scripts/sensor_hp380_v1_ilo_v4.profile %{buildroot}/%{_sysconfdir}/bmc/server_profiles.d/sensor_hp380_v1_ilo_v4.profile
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/scripts/sensor_quanta_v1_ilo_v4.profile %{buildroot}/%{_sysconfdir}/bmc/server_profiles.d/sensor_quanta_v1_ilo_v4.profile
|
||||||
|
|
||||||
|
# binaries
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/maintenance/mtcAgent %{buildroot}/%{local_bindir}/mtcAgent
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/maintenance/mtcClient %{buildroot}/%{local_bindir}/mtcClient
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/heartbeat/hbsAgent %{buildroot}/%{local_bindir}/hbsAgent
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/heartbeat/hbsClient %{buildroot}/%{local_bindir}/hbsClient
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/guest/guestServer %{buildroot}/%{local_bindir}/guestServer
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/guest/guestAgent %{buildroot}/%{local_bindir}/guestAgent
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/pmon/pmond %{buildroot}/%{local_bindir}/pmond
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/hostw/hostwd %{buildroot}/%{local_bindir}/hostwd
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/rmon/rmond %{buildroot}/%{local_bindir}/rmond
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/fsmon/fsmond %{buildroot}/%{local_bindir}/fsmond
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/hwmon/hwmond %{buildroot}/%{local_bindir}/hwmond
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/mtclog/mtclogd %{buildroot}/%{local_bindir}/mtclogd
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/alarm/mtcalarmd %{buildroot}/%{local_bindir}/mtcalarmd
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/rmon/rmon_resource_notify/rmon_resource_notify %{buildroot}/%{local_bindir}/rmon_resource_notify
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/scripts/wipedisk %{buildroot}/%{local_bindir}/wipedisk
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/common/fsync %{buildroot}/%{_sbindir}/fsync
|
||||||
|
install -m 700 -p -D %{_buildsubdir}/pmon/scripts/pmon-restart %{buildroot}/%{local_sbindir}/pmon-restart
|
||||||
|
install -m 700 -p -D %{_buildsubdir}/pmon/scripts/pmon-start %{buildroot}/%{local_sbindir}/pmon-start
|
||||||
|
install -m 700 -p -D %{_buildsubdir}/pmon/scripts/pmon-stop %{buildroot}/%{local_sbindir}/pmon-stop
|
||||||
|
|
||||||
|
# test tools
|
||||||
|
install -m 755 %{_buildsubdir}/hwmon/scripts/show_hp360 %{buildroot}/%{_sbindir}/show_hp360
|
||||||
|
install -m 755 %{_buildsubdir}/hwmon/scripts/show_hp380 %{buildroot}/%{_sbindir}/show_hp380
|
||||||
|
install -m 755 %{_buildsubdir}/hwmon/scripts/show_quanta %{buildroot}/%{_sbindir}/show_quanta
|
||||||
|
|
||||||
|
# init script files
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/scripts/mtcClient %{buildroot}%{_sysconfdir}/init.d/mtcClient
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/scripts/hbsClient %{buildroot}%{_sysconfdir}/init.d/hbsClient
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/guest/scripts/guestServer %{buildroot}%{_sysconfdir}/init.d/guestServer
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/guest/scripts/guestAgent %{buildroot}%{_sysconfdir}/init.d/guestAgent
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/hwmon/scripts/lsb/hwmon %{buildroot}%{_sysconfdir}/init.d/hwmon
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/fsmon/scripts/fsmon %{buildroot}%{_sysconfdir}/init.d/fsmon
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/scripts/mtclog %{buildroot}%{_sysconfdir}/init.d/mtclog
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/pmon/scripts/pmon %{buildroot}%{_sysconfdir}/init.d/pmon
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/rmon/scripts/rmon %{buildroot}%{_sysconfdir}/init.d/rmon
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/hostw/scripts/hostw %{buildroot}%{_sysconfdir}/init.d/hostw
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/alarm/scripts/mtcalarm.init %{buildroot}%{_sysconfdir}/init.d/mtcalarm
|
||||||
|
|
||||||
|
# install -m 755 -p -D %{_buildsubdir}/scripts/config %{buildroot}%{_sysconfdir}/init.d/config
|
||||||
|
|
||||||
|
# TODO: Init hack. Should move to proper module
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/scripts/hwclock.sh %{buildroot}%{_sysconfdir}/init.d/hwclock.sh
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/scripts/hwclock.service %{buildroot}%{_unitdir}/hwclock.service
|
||||||
|
|
||||||
|
# systemd service files
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/fsmon/scripts/fsmon.service %{buildroot}%{_unitdir}/fsmon.service
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/hwmon/scripts/hwmon.service %{buildroot}%{_unitdir}/hwmon.service
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/rmon/scripts/rmon.service %{buildroot}%{_unitdir}/rmon.service
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/pmon/scripts/pmon.service %{buildroot}%{_unitdir}/pmon.service
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/hostw/scripts/hostw.service %{buildroot}%{_unitdir}/hostw.service
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/guest/scripts/guestServer.service %{buildroot}%{_unitdir}/guestServer.service
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/guest/scripts/guestAgent.service %{buildroot}%{_unitdir}/guestAgent.service
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/scripts/mtcClient.service %{buildroot}%{_unitdir}/mtcClient.service
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/scripts/hbsClient.service %{buildroot}%{_unitdir}/hbsClient.service
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/scripts/mtclog.service %{buildroot}%{_unitdir}/mtclog.service
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/scripts/goenabled.service %{buildroot}%{_unitdir}/goenabled.service
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/scripts/runservices.service %{buildroot}%{_unitdir}/runservices.service
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/alarm/scripts/mtcalarm.service %{buildroot}%{_unitdir}/mtcalarm.service
|
||||||
|
|
||||||
|
# go enabled stuff
|
||||||
|
install -m 755 -d %{buildroot}%{local_etc_goenabledd}
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/scripts/goenabled %{buildroot}%{_sysconfdir}/init.d/goenabled
|
||||||
|
|
||||||
|
# start or stop services test script
|
||||||
|
install -m 755 -d %{buildroot}%{local_etc_servicesd}
|
||||||
|
install -m 755 -d %{buildroot}%{local_etc_servicesd}/controller
|
||||||
|
install -m 755 -d %{buildroot}%{local_etc_servicesd}/compute
|
||||||
|
install -m 755 -d %{buildroot}%{local_etc_servicesd}/storage
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/scripts/mtcTest %{buildroot}/%{local_etc_servicesd}/compute
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/scripts/mtcTest %{buildroot}/%{local_etc_servicesd}/controller
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/scripts/mtcTest %{buildroot}/%{local_etc_servicesd}/storage
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/scripts/runservices %{buildroot}%{_sysconfdir}/init.d/runservices
|
||||||
|
|
||||||
|
# test tools
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/scripts/dmemchk.sh %{buildroot}%{local_sbindir}
|
||||||
|
|
||||||
|
# process monitor config files
|
||||||
|
install -m 755 -d %{buildroot}%{local_etc_pmond}
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/scripts/mtcClient.conf %{buildroot}%{local_etc_pmond}/mtcClient.conf
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/scripts/hbsClient.conf %{buildroot}%{local_etc_pmond}/hbsClient.conf
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/pmon/scripts/acpid.conf %{buildroot}%{local_etc_pmond}/acpid.conf
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/pmon/scripts/sshd.conf %{buildroot}%{local_etc_pmond}/sshd.conf
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/pmon/scripts/ntpd.conf %{buildroot}%{local_etc_pmond}/ntpd.conf
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/pmon/scripts/syslog-ng.conf %{buildroot}%{local_etc_pmond}/syslog-ng.conf
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/rmon/scripts/rmon.conf %{buildroot}%{local_etc_pmond}/rmon.conf
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/fsmon/scripts/fsmon.conf %{buildroot}%{local_etc_pmond}/fsmon.conf
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/scripts/mtclogd.conf %{buildroot}%{local_etc_pmond}/mtclogd.conf
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/guest/scripts/guestServer.pmon %{buildroot}%{local_etc_pmond}/guestServer.conf
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/alarm/scripts/mtcalarm.pmon.conf %{buildroot}%{local_etc_pmond}/mtcalarm.conf
|
||||||
|
|
||||||
|
# resource monitor config files
|
||||||
|
install -m 755 -d %{buildroot}%{local_etc_rmond}
|
||||||
|
install -m 755 -d %{buildroot}%{_sysconfdir}/rmonapi.d
|
||||||
|
install -m 755 -d %{buildroot}%{_sysconfdir}/rmonfiles.d
|
||||||
|
install -m 755 -d %{buildroot}%{_sysconfdir}/rmon_interfaces.d
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/rmon/scripts/remotelogging_resource.conf %{buildroot}%{local_etc_rmond}/remotelogging_resource.conf
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/rmon/scripts/cpu_resource.conf %{buildroot}%{local_etc_rmond}/cpu_resource.conf
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/rmon/scripts/memory_resource.conf %{buildroot}%{local_etc_rmond}/memory_resource.conf
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/rmon/scripts/filesystem_resource.conf %{buildroot}%{local_etc_rmond}/filesystem_resource.conf
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/rmon/scripts/cinder_virtual_resource.conf %{buildroot}%{local_etc_rmond}/cinder_virtual_resource.conf
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/rmon/scripts/nova_virtual_resource.conf %{buildroot}%{local_etc_rmond}/nova_virtual_resource.conf
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/rmon/scripts/oam_resource.conf %{buildroot}%{_sysconfdir}/rmon_interfaces.d/oam_resource.conf
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/rmon/scripts/management_resource.conf %{buildroot}%{_sysconfdir}/rmon_interfaces.d/management_resource.conf
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/rmon/scripts/infrastructure_resource.conf %{buildroot}%{_sysconfdir}/rmon_interfaces.d/infrastructure_resource.conf
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/rmon/scripts/query_ntp_servers.sh %{buildroot}%{_sysconfdir}/rmonfiles.d/query_ntp_servers.sh
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/rmon/scripts/rmon_reload_on_cpe.sh %{buildroot}%{local_etc_goenabledd}/rmon_reload_on_cpe.sh
|
||||||
|
|
||||||
|
# log rotation
|
||||||
|
install -m 755 -d %{buildroot}%{_sysconfdir}/logrotate.d
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/scripts/mtce.logrotate %{buildroot}%{local_etc_logrotated}/mtce.logrotate
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/hostw/scripts/hostw.logrotate %{buildroot}%{local_etc_logrotated}/hostw.logrotate
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/pmon/scripts/pmon.logrotate %{buildroot}%{local_etc_logrotated}/pmon.logrotate
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/rmon/scripts/rmon.logrotate %{buildroot}%{local_etc_logrotated}/rmon.logrotate
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/fsmon/scripts/fsmon.logrotate %{buildroot}%{local_etc_logrotated}/fsmon.logrotate
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/hwmon/scripts/hwmon.logrotate %{buildroot}%{local_etc_logrotated}/hwmon.logrotate
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/guest/scripts/guestAgent.logrotate %{buildroot}%{local_etc_logrotated}/guestAgent.logrotate
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/guest/scripts/guestServer.logrotate %{buildroot}%{local_etc_logrotated}/guestServer.logrotate
|
||||||
|
install -m 644 -p -D %{_buildsubdir}/alarm/scripts/mtcalarm.logrotate %{buildroot}%{local_etc_logrotated}/mtcalarm.logrotate
|
||||||
|
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/public/libamon.so.$MAJOR %{buildroot}%{_libdir}/libamon.so.$MAJOR
|
||||||
|
cd %{buildroot}%{_libdir} ; ln -s libamon.so.$MAJOR libamon.so.$MAJOR.$MINOR
|
||||||
|
cd %{buildroot}%{_libdir} ; ln -s libamon.so.$MAJOR libamon.so
|
||||||
|
|
||||||
|
install -m 755 -p -D %{_buildsubdir}/rmon/rmonApi/librmonapi.so.$MAJOR %{buildroot}%{_libdir}/librmonapi.so.$MAJOR
|
||||||
|
cd %{buildroot}%{_libdir} ; ln -s librmonapi.so.$MAJOR librmonapi.so.$MAJOR.$MINOR
|
||||||
|
cd %{buildroot}%{_libdir} ; ln -s librmonapi.so.$MAJOR librmonapi.so
|
||||||
|
|
||||||
|
install -m 755 -d %{buildroot}/var
|
||||||
|
install -m 755 -d %{buildroot}/var/run
|
||||||
|
|
||||||
|
# Enable all services in systemd
|
||||||
|
%post
|
||||||
|
/bin/systemctl enable fsmon.service
|
||||||
|
/bin/systemctl enable mtcClient.service
|
||||||
|
/bin/systemctl enable hbsClient.service
|
||||||
|
/bin/systemctl enable mtclog.service
|
||||||
|
/bin/systemctl enable iscsid.service
|
||||||
|
/bin/systemctl enable rsyncd.service
|
||||||
|
/bin/systemctl enable goenabled.service
|
||||||
|
/bin/systemctl enable mtcalarm.service
|
||||||
|
|
||||||
|
%post -n cgts-mtce-common-hostw
|
||||||
|
/bin/systemctl enable hostw.service
|
||||||
|
|
||||||
|
%post -n cgts-mtce-common-pmon
|
||||||
|
/bin/systemctl enable pmon.service
|
||||||
|
|
||||||
|
%post -n cgts-mtce-common-guestServer
|
||||||
|
/bin/systemctl enable guestServer.service
|
||||||
|
|
||||||
|
%post -n cgts-mtce-common-rmon
|
||||||
|
/bin/systemctl enable rmon.service
|
||||||
|
|
||||||
|
|
||||||
|
###############################
|
||||||
|
# Maintenance Common RPM Files
|
||||||
|
###############################
|
||||||
|
|
||||||
|
%files
|
||||||
|
%license LICENSE
|
||||||
|
|
||||||
|
%defattr(-,root,root,-)
|
||||||
|
|
||||||
|
# create the mtc and its tmp dir
|
||||||
|
%dir %{_sysconfdir}/mtc
|
||||||
|
%dir %{_sysconfdir}/mtc/tmp
|
||||||
|
|
||||||
|
# SM OCF Start/Stop/Monitor Scripts
|
||||||
|
%{ocf_resourced}/platform/mtcAgent
|
||||||
|
%{ocf_resourced}/platform/hbsAgent
|
||||||
|
|
||||||
|
# Config files
|
||||||
|
%config(noreplace)/etc/mtc.ini
|
||||||
|
|
||||||
|
# Config files - Non-Modifiable
|
||||||
|
%{_sysconfdir}/mtc.conf
|
||||||
|
%{_sysconfdir}/mtc/fsmond.conf
|
||||||
|
|
||||||
|
# Mainteance Process Monitor Config Files
|
||||||
|
%{local_etc_pmond}/sshd.conf
|
||||||
|
%{local_etc_pmond}/ntpd.conf
|
||||||
|
%{local_etc_pmond}/mtcClient.conf
|
||||||
|
%{local_etc_pmond}/acpid.conf
|
||||||
|
%{local_etc_pmond}/hbsClient.conf
|
||||||
|
%{local_etc_pmond}/syslog-ng.conf
|
||||||
|
%{local_etc_pmond}/fsmon.conf
|
||||||
|
%{local_etc_pmond}/mtclogd.conf
|
||||||
|
%{local_etc_pmond}/mtcalarm.conf
|
||||||
|
|
||||||
|
# Mainteance log rotation config files
|
||||||
|
%{local_etc_logrotated}/fsmon.logrotate
|
||||||
|
%{local_etc_logrotated}/mtce.logrotate
|
||||||
|
%{local_etc_logrotated}/mtcalarm.logrotate
|
||||||
|
|
||||||
|
# Maintenance start/stop services scripts
|
||||||
|
%{local_etc_servicesd}/controller/mtcTest
|
||||||
|
%{local_etc_servicesd}/storage/mtcTest
|
||||||
|
%{local_etc_servicesd}/compute/mtcTest
|
||||||
|
|
||||||
|
# BMC profile Files
|
||||||
|
%{bmc_profilesd}/sensor_hp360_v1_ilo_v4.profile
|
||||||
|
%{bmc_profilesd}/sensor_quanta_v1_ilo_v4.profile
|
||||||
|
%{bmc_profilesd}/sensor_hp380_v1_ilo_v4.profile
|
||||||
|
|
||||||
|
# Init scripts
|
||||||
|
%{_sysconfdir}/init.d/runservices
|
||||||
|
%{_sysconfdir}/init.d/goenabled
|
||||||
|
%{_sysconfdir}/init.d/fsmon
|
||||||
|
%{_sysconfdir}/init.d/mtclog
|
||||||
|
%{_sysconfdir}/init.d/hbsClient
|
||||||
|
%{_sysconfdir}/init.d/mtcClient
|
||||||
|
%{_sysconfdir}/init.d/mtcalarm
|
||||||
|
%{_sysconfdir}/init.d/hwclock.sh
|
||||||
|
|
||||||
|
%{_unitdir}/runservices.service
|
||||||
|
%{_unitdir}/goenabled.service
|
||||||
|
%{_unitdir}/mtclog.service
|
||||||
|
%{_unitdir}/mtcalarm.service
|
||||||
|
%{_unitdir}/fsmon.service
|
||||||
|
%{_unitdir}/mtcClient.service
|
||||||
|
%{_unitdir}/hbsClient.service
|
||||||
|
%{_unitdir}/hwclock.service
|
||||||
|
|
||||||
|
# Binaries
|
||||||
|
%{local_bindir}/mtcAgent
|
||||||
|
%{local_bindir}/fsmond
|
||||||
|
%{local_bindir}/hbsAgent
|
||||||
|
%{local_bindir}/mtclogd
|
||||||
|
%{local_bindir}/mtcalarmd
|
||||||
|
%{local_bindir}/hbsClient
|
||||||
|
%{local_bindir}/mtcClient
|
||||||
|
%{local_bindir}/wipedisk
|
||||||
|
%{local_sbindir}/dmemchk.sh
|
||||||
|
%{_sbindir}/fsync
|
||||||
|
|
||||||
|
###############################
|
||||||
|
# Process Monitor RPM Files
|
||||||
|
###############################
|
||||||
|
%files -n cgts-mtce-common-pmon
|
||||||
|
|
||||||
|
%defattr(-,root,root,-)
|
||||||
|
|
||||||
|
# Config files - Non-Modifiable
|
||||||
|
%{_sysconfdir}/mtc/pmond.conf
|
||||||
|
|
||||||
|
%{local_etc_logrotated}/pmon.logrotate
|
||||||
|
%{_unitdir}/pmon.service
|
||||||
|
%{local_sbindir}/pmon-restart
|
||||||
|
%{local_sbindir}/pmon-start
|
||||||
|
%{local_sbindir}/pmon-stop
|
||||||
|
|
||||||
|
/usr/lib64/libamon.so.1.0
|
||||||
|
/usr/lib64/libamon.so.1
|
||||||
|
/usr/lib64/libamon.so
|
||||||
|
|
||||||
|
%{_sysconfdir}/init.d/pmon
|
||||||
|
%{local_bindir}/pmond
|
||||||
|
|
||||||
|
###############################
|
||||||
|
# Resource Monitor RPM Files
|
||||||
|
###############################
|
||||||
|
%files -n cgts-mtce-common-rmon
|
||||||
|
|
||||||
|
%defattr(-,root,root,-)
|
||||||
|
|
||||||
|
# Config files - Non-Modifiable
|
||||||
|
%{_sysconfdir}/mtc/rmond.conf
|
||||||
|
|
||||||
|
%{local_etc_pmond}/rmon.conf
|
||||||
|
%{local_etc_logrotated}/rmon.logrotate
|
||||||
|
%{_unitdir}/rmon.service
|
||||||
|
|
||||||
|
%{local_etc_rmond}/filesystem_resource.conf
|
||||||
|
%{local_etc_rmond}/cpu_resource.conf
|
||||||
|
%{local_etc_rmond}/remotelogging_resource.conf
|
||||||
|
%{local_etc_rmond}/memory_resource.conf
|
||||||
|
%{local_etc_rmond}/cinder_virtual_resource.conf
|
||||||
|
%{local_etc_rmond}/nova_virtual_resource.conf
|
||||||
|
|
||||||
|
%{_sysconfdir}/rmon_interfaces.d/management_resource.conf
|
||||||
|
%{_sysconfdir}/rmon_interfaces.d/oam_resource.conf
|
||||||
|
%{_sysconfdir}/rmon_interfaces.d/infrastructure_resource.conf
|
||||||
|
%{_sysconfdir}/rmonfiles.d/query_ntp_servers.sh
|
||||||
|
|
||||||
|
/usr/lib64/librmonapi.so.1.0
|
||||||
|
/usr/lib64/librmonapi.so.1
|
||||||
|
/usr/lib64/librmonapi.so
|
||||||
|
|
||||||
|
%dir %{_sysconfdir}/rmonapi.d
|
||||||
|
|
||||||
|
%{_sysconfdir}/init.d/rmon
|
||||||
|
%{local_bindir}/rmond
|
||||||
|
%{local_bindir}/rmon_resource_notify
|
||||||
|
%{local_etc_goenabledd}/rmon_reload_on_cpe.sh
|
||||||
|
|
||||||
|
###############################
|
||||||
|
# Hardware Monitor RPM Files
|
||||||
|
###############################
|
||||||
|
%files -n cgts-mtce-common-hwmon
|
||||||
|
|
||||||
|
%defattr(-,root,root,-)
|
||||||
|
|
||||||
|
# Config files - Non-Modifiable
|
||||||
|
%{_sysconfdir}/mtc/hwmond.conf
|
||||||
|
|
||||||
|
%{_unitdir}/hwmon.service
|
||||||
|
%{local_etc_logrotated}/hwmon.logrotate
|
||||||
|
%{ocf_resourced}/platform/hwmon
|
||||||
|
|
||||||
|
%{_sbindir}/show_hp380
|
||||||
|
%{_sbindir}/show_hp360
|
||||||
|
%{_sbindir}/show_quanta
|
||||||
|
|
||||||
|
%{_sysconfdir}/init.d/hwmon
|
||||||
|
%{local_bindir}/hwmond
|
||||||
|
|
||||||
|
###############################
|
||||||
|
# Guest Agent RPM Files
|
||||||
|
###############################
|
||||||
|
%files -n cgts-mtce-common-guestAgent
|
||||||
|
|
||||||
|
%defattr(-,root,root,-)
|
||||||
|
|
||||||
|
# Config files - Non-Modifiable
|
||||||
|
%{_sysconfdir}/mtc/guestAgent.ini
|
||||||
|
|
||||||
|
%{_unitdir}/guestAgent.service
|
||||||
|
%{local_etc_logrotated}/guestAgent.logrotate
|
||||||
|
%{ocf_resourced}/platform/guestAgent
|
||||||
|
|
||||||
|
%{_sysconfdir}/init.d/guestAgent
|
||||||
|
%{local_bindir}/guestAgent
|
||||||
|
|
||||||
|
###############################
|
||||||
|
# Guest Server RPM Files
|
||||||
|
###############################
|
||||||
|
%files -n cgts-mtce-common-guestServer
|
||||||
|
|
||||||
|
%defattr(-,root,root,-)
|
||||||
|
|
||||||
|
# Config files - Non-Modifiable
|
||||||
|
%{_sysconfdir}/mtc/guestServer.ini
|
||||||
|
|
||||||
|
%{local_etc_pmond}/guestServer.conf
|
||||||
|
%{local_etc_logrotated}/guestServer.logrotate
|
||||||
|
%{_unitdir}/guestServer.service
|
||||||
|
|
||||||
|
%{_sysconfdir}/init.d/guestServer
|
||||||
|
%{local_bindir}/guestServer
|
||||||
|
|
||||||
|
|
||||||
|
###############################
|
||||||
|
# Host Watchdog RPM Files
|
||||||
|
###############################
|
||||||
|
%files -n cgts-mtce-common-hostw
|
||||||
|
|
||||||
|
%defattr(-,root,root,-)
|
||||||
|
|
||||||
|
# Config files - Non-Modifiable
|
||||||
|
%{_sysconfdir}/mtc/hostwd.conf
|
||||||
|
|
||||||
|
%{local_etc_logrotated}/hostw.logrotate
|
||||||
|
%{_unitdir}/hostw.service
|
||||||
|
%{_sysconfdir}/init.d/hostw
|
||||||
|
%{local_bindir}/hostwd
|
4
mtce-common/cgts-mtce-common-1.0/.gitignore
vendored
Normal file
4
mtce-common/cgts-mtce-common-1.0/.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
*.swp
|
||||||
|
*.o
|
||||||
|
*.a
|
||||||
|
*~
|
202
mtce-common/cgts-mtce-common-1.0/LICENSE
Normal file
202
mtce-common/cgts-mtce-common-1.0/LICENSE
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
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.
|
47
mtce-common/cgts-mtce-common-1.0/Makefile
Executable file
47
mtce-common/cgts-mtce-common-1.0/Makefile
Executable file
@ -0,0 +1,47 @@
|
|||||||
|
#
|
||||||
|
# Copyright (c) 2013-2016 Wind River Systems, Inc.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
|
VER=1
|
||||||
|
VER_MJR=1
|
||||||
|
|
||||||
|
build:
|
||||||
|
@(cd public ; make lib VER=$(VER) VER_MJR=$(VER_MJR))
|
||||||
|
@(cd rmon/rmonApi ; make lib VER=$(VER) VER_MJR=$(VER_MJR))
|
||||||
|
@(cd daemon ; make lib VER=$(VER) VER_MJR=$(VER_MJR))
|
||||||
|
@(cd common ; make lib fsync VER=$(VER) VER_MJR=$(VER_MJR))
|
||||||
|
@(cd alarm ; make build VER=$(VER) VER_MJR=$(VER_MJR))
|
||||||
|
@(cd heartbeat ; make build VER=$(VER) VER_MJR=$(VER_MJR))
|
||||||
|
@(cd maintenance ; make build VER=$(VER) VER_MJR=$(VER_MJR))
|
||||||
|
@(cd hwmon ; make build VER=$(VER) VER_MJR=$(VER_MJR))
|
||||||
|
@(cd mtclog ; make build VER=$(VER) VER_MJR=$(VER_MJR))
|
||||||
|
@(cd pmon ; make build VER=$(VER) VER_MJR=$(VER_MJR))
|
||||||
|
@(cd guest ; make build VER=$(VER) VER_MJR=$(VER_MJR))
|
||||||
|
@(cd fsmon ; make build VER=$(VER) VER_MJR=$(VER_MJR))
|
||||||
|
@(cd rmon ; make build VER=$(VER) VER_MJR=$(VER_MJR))
|
||||||
|
@(cd rmon/rmon_resource_notify ; make build VER=$(VER) VER_MJR=$(VER_MJR))
|
||||||
|
@(cd hostw ; make build VER=$(VER) VER_MJR=$(VER_MJR))
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@( cd public ; make clean )
|
||||||
|
@( cd rmon/rmonApi ; make clean )
|
||||||
|
@( cd daemon ; make clean )
|
||||||
|
@( cd common ; make clean )
|
||||||
|
@( cd alarm ; make clean )
|
||||||
|
@( cd mtclog ; make clean )
|
||||||
|
@( cd hwmon ; make clean )
|
||||||
|
@( cd pmon ; make clean )
|
||||||
|
@( cd guest ; make clean )
|
||||||
|
@( cd fsmon ; make clean )
|
||||||
|
@( cd heartbeat ; make clean )
|
||||||
|
@( cd maintenance ; make clean )
|
||||||
|
@( cd rmon ; make clean )
|
||||||
|
@( cd rmon/rmon_resource_notify ; make clean )
|
||||||
|
@( cd hostw ; make clean )
|
||||||
|
@( rm -rf release )
|
||||||
|
|
||||||
|
backup: clean
|
||||||
|
mkdir -p ~/mtce
|
||||||
|
cp -a * ~/mtce
|
44
mtce-common/cgts-mtce-common-1.0/alarm/Makefile
Executable file
44
mtce-common/cgts-mtce-common-1.0/alarm/Makefile
Executable file
@ -0,0 +1,44 @@
|
|||||||
|
SRCS = alarmInit.cpp alarmData.cpp alarmHdlr.cpp alarmMgr.cpp alarmUtil.cpp alarm.cpp
|
||||||
|
OBJS = $(SRCS:.cpp=.o)
|
||||||
|
LDLIBS = -lstdc++ -ldaemon -lcommon -lfmcommon -ljson-c -lrt -lcrypto -luuid
|
||||||
|
INCLUDES = -I../daemon -I../common -I../smash -I../maintenance -I../public -I. -I..
|
||||||
|
CCFLAGS = -g -O2 -Wall -Wextra -Werror
|
||||||
|
|
||||||
|
STATIC_ANALYSIS_TOOL = cppcheck
|
||||||
|
STATIC_ANALYSIS_TOOL_EXISTS = $(shell [[ -e `which $(STATIC_ANALYSIS_TOOL)` ]] && echo 1 || echo 0)
|
||||||
|
|
||||||
|
BINS = mtcalarmd
|
||||||
|
|
||||||
|
|
||||||
|
.cpp.o:
|
||||||
|
$(CXX) $(INCLUDES) $(CCFLAGS) $(EXTRACCFLAGS) -c $< -o $@
|
||||||
|
|
||||||
|
all: clean_bins static_analysis common daemon process library
|
||||||
|
|
||||||
|
static_analysis:
|
||||||
|
ifeq ($(STATIC_ANALYSIS_TOOL_EXISTS), 1)
|
||||||
|
$(STATIC_ANALYSIS_TOOL) --language=c++ --enable=warning -U__AREA__ -DWANT_FIT_TESTING *.cpp *.h
|
||||||
|
else
|
||||||
|
echo "Warning: '$(STATIC_ANALYSIS_TOOL)' static analysis tool not installed ; bypassing ..."
|
||||||
|
endif
|
||||||
|
|
||||||
|
build: clean_bins static_analysis ${OBJS} library process
|
||||||
|
|
||||||
|
common:
|
||||||
|
( cd ../common ; make clean ; make lib VER=$(VER) VER_MJR=$(VER_MJR))
|
||||||
|
|
||||||
|
daemon:
|
||||||
|
( cd ../daemon ; make clean ; make lib VER=$(VER) VER_MJR=$(VER_MJR))
|
||||||
|
|
||||||
|
library:
|
||||||
|
ar rcs libalarm.a alarm.o $(EXTRAARFLAGS)
|
||||||
|
|
||||||
|
process: $(OBJS)
|
||||||
|
$(CXX) $(CCFLAGS) ${OBJS} -L../daemon -L../common $(LDLIBS) -o mtcalarmd
|
||||||
|
|
||||||
|
clean_bins:
|
||||||
|
@rm -f $(BINS)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@rm -f $(OBJ) $(BINS) *.o *.a
|
||||||
|
|
189
mtce-common/cgts-mtce-common-1.0/alarm/alarm.cpp
Normal file
189
mtce-common/cgts-mtce-common-1.0/alarm/alarm.cpp
Normal file
@ -0,0 +1,189 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015-2017 Wind River Systems, Inc.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Wind River Titanium Cloud 'Heartbeat Agent' Alarm Module
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
#ifdef __AREA__
|
||||||
|
#undef __AREA__
|
||||||
|
#endif
|
||||||
|
#define __AREA__ "alm"
|
||||||
|
|
||||||
|
#include "daemon_common.h"
|
||||||
|
#include "nodeBase.h" /* for ... fail codes */
|
||||||
|
#include "jsonUtil.h"
|
||||||
|
#include "alarm.h" /* for ... module header */
|
||||||
|
|
||||||
|
static msgClassSock * user_sock_ptr = NULL ;
|
||||||
|
|
||||||
|
/* A call to this API is required in advance of sending an alarm request */
|
||||||
|
int alarm_register_user ( msgClassSock * sock_ptr )
|
||||||
|
{
|
||||||
|
int rc = PASS ;
|
||||||
|
if ( sock_ptr && sock_ptr->getFD() && sock_ptr->sock_ok() )
|
||||||
|
{
|
||||||
|
ilog ("Registered with maintenance alarm service\n");
|
||||||
|
user_sock_ptr = sock_ptr ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
elog ("Failed to register with maintenance alarm service\n");
|
||||||
|
rc = FAIL_SOCKET_BIND ;
|
||||||
|
}
|
||||||
|
return (rc);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Construct an alarm request json string in the following form
|
||||||
|
{\"mtcalarm\":[{\"alarmid\":\"200.009\",\"hostname\":\"compute-3\",\"operation\":\"set\",\"severity\":\"major\",\"entity\":\"Infrastructure\",\"prefix\":\"service=heartbeat\"}, {\"alarmid\":\"200.005\",\"hostname\":\"compute-3\",\"operation\":\"set\",\"severity\":\"major\",\"entity\":\"Management\",\"prefix\":\"service=heartbeat\"}]}"
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
{ \"mtcalarm\":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
\"alarmid\":\"200.009\",
|
||||||
|
\"hostname\":\"compute-3\",
|
||||||
|
\"operation\":\"set\",
|
||||||
|
\"severity\":\"major\",
|
||||||
|
\"entity\":\"Infrastructure\",
|
||||||
|
\"prefix\":\"service=heartbeat\"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
|
int alarm_ ( string hostname, const char * id, EFmAlarmStateT state, EFmAlarmSeverityT severity, const char * entity, string prefix )
|
||||||
|
{
|
||||||
|
int rc = PASS ;
|
||||||
|
char request [MAX_ALARM_REQ_MSG_SIZE] ;
|
||||||
|
string msg_type ;
|
||||||
|
string sev ;
|
||||||
|
|
||||||
|
if ( state == FM_ALARM_STATE_MSG )
|
||||||
|
msg_type = "msg" ;
|
||||||
|
else if ( state == FM_ALARM_STATE_SET )
|
||||||
|
msg_type = "set" ;
|
||||||
|
else
|
||||||
|
msg_type = "clear" ;
|
||||||
|
|
||||||
|
switch ( severity )
|
||||||
|
{
|
||||||
|
case FM_ALARM_SEVERITY_CLEAR:
|
||||||
|
sev = "clear" ;
|
||||||
|
break ;
|
||||||
|
case FM_ALARM_SEVERITY_WARNING:
|
||||||
|
sev = "warning";
|
||||||
|
break ;
|
||||||
|
case FM_ALARM_SEVERITY_MINOR:
|
||||||
|
sev = "minor";
|
||||||
|
break ;
|
||||||
|
case FM_ALARM_SEVERITY_MAJOR:
|
||||||
|
sev = "major";
|
||||||
|
break ;
|
||||||
|
case FM_ALARM_SEVERITY_CRITICAL:
|
||||||
|
sev = "critical";
|
||||||
|
break ;
|
||||||
|
default :
|
||||||
|
sev = "unknown";
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
|
||||||
|
snprintf ( request, MAX_ALARM_REQ_MSG_SIZE, "{\"mtcalarm\":[{\"alarmid\":\"%s\",\"hostname\":\"%s\",\"operation\":\"%s\",\"severity\":\"%s\",\"entity\":\"%s\",\"prefix\":\"%s\"}]}",
|
||||||
|
id,
|
||||||
|
hostname.data(),
|
||||||
|
msg_type.data(),
|
||||||
|
sev.data(),
|
||||||
|
entity,
|
||||||
|
prefix.data());
|
||||||
|
size_t len = strlen(request) ;
|
||||||
|
|
||||||
|
/* Retrying up to 3 times if the send fails */
|
||||||
|
for ( int i = 0 ; i < 3 ; i++ )
|
||||||
|
{
|
||||||
|
int bytes = user_sock_ptr->write((char*)&request[0], len );
|
||||||
|
if ( bytes <= 0 )
|
||||||
|
{
|
||||||
|
elog("%s failed to send alarm request (%d:%m)\n", hostname.c_str(), errno );
|
||||||
|
elog("... %s\n", request);
|
||||||
|
rc = FAIL_SOCKET_SENDTO ;
|
||||||
|
}
|
||||||
|
else if ( ((int)len) != bytes )
|
||||||
|
{
|
||||||
|
elog ("%s failed to send complete alarm message (%d:%ld)\n", hostname.c_str(), bytes, len );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ilog ("%s %s\n", hostname.c_str(), request);
|
||||||
|
return ( PASS ) ;
|
||||||
|
}
|
||||||
|
daemon_signal_hdlr ();
|
||||||
|
|
||||||
|
usleep (1000);
|
||||||
|
}
|
||||||
|
return (rc);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int alarm_clear ( string hostname, const char * alarm_id_ptr , string entity )
|
||||||
|
{
|
||||||
|
string prefix = "" ;
|
||||||
|
return (alarm_ ( hostname, alarm_id_ptr, FM_ALARM_STATE_CLEAR, FM_ALARM_SEVERITY_CLEAR, entity.data(), prefix.data() ));
|
||||||
|
}
|
||||||
|
|
||||||
|
int alarm_warning ( string hostname, const char * alarm_id_ptr , string entity )
|
||||||
|
{
|
||||||
|
string prefix = "" ;
|
||||||
|
return (alarm_ ( hostname, alarm_id_ptr, FM_ALARM_STATE_SET, FM_ALARM_SEVERITY_WARNING, entity.data(), prefix.data() ));
|
||||||
|
}
|
||||||
|
|
||||||
|
int alarm_minor ( string hostname, const char * alarm_id_ptr , string entity )
|
||||||
|
{
|
||||||
|
string prefix = "" ;
|
||||||
|
return (alarm_ ( hostname, alarm_id_ptr, FM_ALARM_STATE_SET, FM_ALARM_SEVERITY_MINOR, entity.data(), prefix.data() ));
|
||||||
|
}
|
||||||
|
|
||||||
|
int alarm_major ( string hostname, const char * alarm_id_ptr , string entity )
|
||||||
|
{
|
||||||
|
string prefix = "" ;
|
||||||
|
return (alarm_ ( hostname, alarm_id_ptr, FM_ALARM_STATE_SET, FM_ALARM_SEVERITY_MAJOR, entity.data(), prefix.data() ));
|
||||||
|
}
|
||||||
|
|
||||||
|
int alarm_critical ( string hostname, const char * alarm_id_ptr , string entity )
|
||||||
|
{
|
||||||
|
string prefix = "" ;
|
||||||
|
return (alarm_ ( hostname, alarm_id_ptr, FM_ALARM_STATE_SET, FM_ALARM_SEVERITY_CRITICAL, entity.data(), prefix.data() ));
|
||||||
|
}
|
||||||
|
|
||||||
|
int alarm_warning_log ( string hostname, const char * alarm_id_ptr , string entity , string prefix )
|
||||||
|
{
|
||||||
|
return (alarm_ ( hostname, alarm_id_ptr, FM_ALARM_STATE_MSG, FM_ALARM_SEVERITY_WARNING, entity.data(), prefix.data() ));
|
||||||
|
}
|
||||||
|
|
||||||
|
int alarm_minor_log ( string hostname, const char * alarm_id_ptr , string entity , string prefix )
|
||||||
|
{
|
||||||
|
return (alarm_ ( hostname, alarm_id_ptr, FM_ALARM_STATE_MSG, FM_ALARM_SEVERITY_MINOR, entity.data(), prefix.data() ));
|
||||||
|
}
|
||||||
|
|
||||||
|
int alarm_major_log ( string hostname, const char * alarm_id_ptr , string entity , string prefix )
|
||||||
|
{
|
||||||
|
return (alarm_ ( hostname, alarm_id_ptr, FM_ALARM_STATE_MSG, FM_ALARM_SEVERITY_MAJOR, entity.data(), prefix.data() ));
|
||||||
|
}
|
||||||
|
|
||||||
|
int alarm_critical_log ( string hostname, const char * alarm_id_ptr , string entity , string prefix )
|
||||||
|
{
|
||||||
|
return (alarm_ ( hostname, alarm_id_ptr, FM_ALARM_STATE_MSG, FM_ALARM_SEVERITY_CRITICAL, entity.data(), prefix.data() ));
|
||||||
|
}
|
166
mtce-common/cgts-mtce-common-1.0/alarm/alarm.h
Normal file
166
mtce-common/cgts-mtce-common-1.0/alarm/alarm.h
Normal file
@ -0,0 +1,166 @@
|
|||||||
|
#ifndef __INCLUDE_ALARM_H__
|
||||||
|
#define __INCLUDE_ALARM_H__
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2016-2017 Wind River Systems, Inc.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Wind River Titanium Cloud Maintenance Alarm Service Header
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "nodeBase.h"
|
||||||
|
#include "nodeUtil.h" /* for ... common utilities */
|
||||||
|
|
||||||
|
#include "msgClass.h" /* for ... msgClassSock type definition */
|
||||||
|
|
||||||
|
/* external APIs */
|
||||||
|
#include "fmAPI.h"
|
||||||
|
|
||||||
|
#define ENTITY_PREFIX ((const char *)"host=")
|
||||||
|
|
||||||
|
#define MAX_ALARMS (10)
|
||||||
|
#define MAX_ALARM_REQ_PER_MSG (4)
|
||||||
|
#define MAX_ALARM_REQ_MSG_SIZE (500)
|
||||||
|
#define MAX_ALARM_REQ_SIZE (MAX_ALARM_REQ_PER_MSG*MAX_ALARM_REQ_MSG_SIZE)
|
||||||
|
|
||||||
|
#define SWERR_ALARM_ID ((const char *)"200.000") /* Do No Use */
|
||||||
|
#define LOCK_ALARM_ID ((const char *)"200.001")
|
||||||
|
#define ENABLE_ALARM_ID ((const char *)"200.004")
|
||||||
|
#define MGMNT_HB_ALARM_ID ((const char *)"200.005")
|
||||||
|
#define PMOND_ALARM_ID ((const char *)"200.006")
|
||||||
|
#define SENSOR_ALARM_ID ((const char *)"200.007") /* Sensor read alarm ; i.e. the sensor read value bad */
|
||||||
|
#define INFRA_HB_ALARM_ID ((const char *)"200.009")
|
||||||
|
#define BM_ALARM_ID ((const char *)"200.010")
|
||||||
|
#define CONFIG_ALARM_ID ((const char *)"200.011")
|
||||||
|
#define CH_CONT_ALARM_ID ((const char *)"200.012") /* Combo Host Controller Failure - with Active Compute */
|
||||||
|
#define CH_COMP_ALARM_ID ((const char *)"200.013") /* Combo Host Compute Failure - on last Controller */
|
||||||
|
#define SENSORCFG_ALARM_ID ((const char *)"200.014") /* Sensor configuration alarm ; i.e. could not add */
|
||||||
|
#define SENSORGROUP_ALARM_ID ((const char *)"200.015") /* Sensor Group Read Error */
|
||||||
|
|
||||||
|
#define EVENT_LOG_ID ((const char *)"200.020")
|
||||||
|
#define COMMAND_LOG_ID ((const char *)"200.021")
|
||||||
|
#define STATECHANGE_LOG_ID ((const char *)"200.022")
|
||||||
|
#define SERVICESTATUS_LOG_ID ((const char *)"200.023") /* log used to report service failure events against */
|
||||||
|
|
||||||
|
|
||||||
|
/** Heartbeat Alarm Abstract Reference IDs */
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
HBS_ALARM_ID__HB_MGMNT = 0,
|
||||||
|
HBS_ALARM_ID__HB_INFRA = 1,
|
||||||
|
HBS_ALARM_ID__PMOND = 2,
|
||||||
|
HBS_ALARM_ID__SERVICE = 3,
|
||||||
|
HBS_ALARM_ID__LAST = 4,
|
||||||
|
} alarm_id_enum ;
|
||||||
|
|
||||||
|
string alarmUtil_getId_str ( alarm_id_enum alarm_id_num );
|
||||||
|
int alarmUtil_getId_enum ( string alarm_id_str, alarm_id_enum & alarm_id_num );
|
||||||
|
|
||||||
|
/** Converts FM severity to representative string */
|
||||||
|
string alarmUtil_getSev_str ( EFmAlarmSeverityT severity );
|
||||||
|
EFmAlarmSeverityT alarmUtil_getSev_enum ( string severity );
|
||||||
|
|
||||||
|
#ifndef __MODULE_PRIVATE__
|
||||||
|
|
||||||
|
int alarm_register_user ( msgClassSock * sock_ptr );
|
||||||
|
|
||||||
|
/* Public API */
|
||||||
|
int alarm_ ( string hostname, const char * id, EFmAlarmStateT state, EFmAlarmSeverityT severity, const char * entity, string prefix );
|
||||||
|
int alarm_clear ( string hostname, const char * id_ptr, string entity );
|
||||||
|
int alarm_warning ( string hostname, const char * id_ptr, string entity );
|
||||||
|
int alarm_minor ( string hostname, const char * id_ptr, string entity );
|
||||||
|
int alarm_major ( string hostname, const char * id_ptr, string entity );
|
||||||
|
int alarm_critical ( string hostname, const char * id_ptr, string entity );
|
||||||
|
int alarm_critical_log ( string hostname, const char * id_ptr, string entity );
|
||||||
|
int alarm_major_log ( string hostname, const char * id_ptr, string entity );
|
||||||
|
int alarm_minor_log ( string hostname, const char * id_ptr, string entity );
|
||||||
|
int alarm_warning_log ( string hostname, const char * id_ptr, string entity, string prefix );
|
||||||
|
int alarm_log ( string hostname, const char * id_ptr, string entity );
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
SFmAlarmDataT alarm ;
|
||||||
|
string name ;
|
||||||
|
string instc_prefix ; /* Instance prefix i.e. "=sensor." or "=process." */
|
||||||
|
string critl_reason ;
|
||||||
|
string minor_reason ;
|
||||||
|
string major_reason ;
|
||||||
|
string clear_reason ;
|
||||||
|
} alarmUtil_type ;
|
||||||
|
|
||||||
|
|
||||||
|
#define MAX_FAILED_B2B_RECEIVES_B4_RESTART (5)
|
||||||
|
|
||||||
|
|
||||||
|
/* Test Commandss
|
||||||
|
*
|
||||||
|
STR="{\"mtcalarm\":[{\"alarmid\":\"200.009\",\"hostname\":\"compute-3\",\"operation\":\"clear\",\"severity\":\"clear\",\"entity\":\"Infrastructure\",\"prefix\":\"service=heartbeat\"}, {\"alarmid\":\"200.005\",\"hostname\":\"compute-3\",\"operation\":\"set\",\"severity\":\"major\",\"entity\":\"Management\",\"prefix\":\"service=heartbeat\"}]}"
|
||||||
|
PROTOCOL="UDP4-DATAGRAM"
|
||||||
|
ADDRESS="127.0.0.1"
|
||||||
|
port="2122"
|
||||||
|
echo "${STR}" | socat - ${PROTOCOL}:${ADDRESS}:${port}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define MTCALARM_REQ_LABEL ((const char *)"mtcalarm")
|
||||||
|
|
||||||
|
#define MTCALARM_REQ_KEY__OPERATION ((const char *)"operation")
|
||||||
|
#define MTCALARM_REQ_KEY__HOSTNAME ((const char *)"hostname")
|
||||||
|
#define MTCALARM_REQ_KEY__ALARMID ((const char *)"alarmid")
|
||||||
|
#define MTCALARM_REQ_KEY__SEVERITY ((const char *)"severity")
|
||||||
|
#define MTCALARM_REQ_KEY__ENTITY ((const char *)"entity")
|
||||||
|
#define MTCALARM_REQ_KEY__PREFIX ((const char *)"prefix")
|
||||||
|
|
||||||
|
/* in alarmData.cpp */
|
||||||
|
void alarmData_init ( void );
|
||||||
|
alarmUtil_type * alarmData_getAlarm_ptr ( string alarm_id_str );
|
||||||
|
|
||||||
|
/* in alarmUtil.cpp */
|
||||||
|
// EFmAlarmSeverityT mtcAlarm_state ( string hostname, alarm_id_enum id );
|
||||||
|
|
||||||
|
|
||||||
|
/* in alarmHdlr.cpp */
|
||||||
|
int alarmHdlr_request_handler ( char * msg_ptr );
|
||||||
|
|
||||||
|
/* in alarmMgr.cpp */
|
||||||
|
int alarmMgr_manage_alarm ( string alarmid ,
|
||||||
|
string hostname,
|
||||||
|
string operation,
|
||||||
|
string severity,
|
||||||
|
string entity,
|
||||||
|
string prefix);
|
||||||
|
|
||||||
|
/* Clear all alarms against this host */
|
||||||
|
void alarmUtil_clear_all ( string hostname );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Query the specified alarm severity level.
|
||||||
|
* Severity levels are specified in fmAPI.h
|
||||||
|
**/
|
||||||
|
EFmAlarmSeverityT alarmUtil_query ( string hostname,
|
||||||
|
string identity,
|
||||||
|
string instance );
|
||||||
|
|
||||||
|
int alarmUtil_query_identity ( string identity,
|
||||||
|
SFmAlarmDataT * alarm_list_ptr,
|
||||||
|
unsigned int alarms_max );
|
||||||
|
|
||||||
|
int alarmUtil_clear ( string hostname, string alarm_id, string entity );
|
||||||
|
int alarmUtil_critical ( string hostname, string alarm_id, string entity );
|
||||||
|
int alarmUtil_major ( string hostname, string alarm_id, string entity );
|
||||||
|
int alarmUtil_minor ( string hostname, string alarm_id, string entity );
|
||||||
|
int alarmUtil_warning ( string hostname, string alarm_id, string entity );
|
||||||
|
int alarmUtil_critical_log ( string hostname, string alarm_id, string entity );
|
||||||
|
int alarmUtil_major_log ( string hostname, string alarm_id, string entity );
|
||||||
|
int alarmUtil_minor_log ( string hostname, string alarm_id, string entity );
|
||||||
|
int alarmUtil_warning_log ( string hostname, string alarm_id, string entity, string prefix );
|
||||||
|
|
||||||
|
#endif // _MODULE_PRIVATE_
|
||||||
|
#endif // __INCLUDE_ALARM_H__
|
195
mtce-common/cgts-mtce-common-1.0/alarm/alarmData.cpp
Normal file
195
mtce-common/cgts-mtce-common-1.0/alarm/alarmData.cpp
Normal file
@ -0,0 +1,195 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016-2017 Wind River Systems, Inc.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Wind River Titanium Cloud Maintenance Alarm Daemon Utility
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
#ifdef __AREA__
|
||||||
|
#undef __AREA__
|
||||||
|
#endif
|
||||||
|
#define __AREA__ "alm"
|
||||||
|
|
||||||
|
#define __MODULE_PRIVATE__
|
||||||
|
|
||||||
|
#include "daemon_common.h" /* */
|
||||||
|
#include "alarm.h" /* for ... this module header */
|
||||||
|
|
||||||
|
/* TODO: Replace this with YAML Parsing */
|
||||||
|
static alarmUtil_type alarm_list[HBS_ALARM_ID__LAST] ;
|
||||||
|
|
||||||
|
alarmUtil_type * alarmData_getAlarm_ptr ( string alarm_id_str )
|
||||||
|
{
|
||||||
|
alarm_id_enum id = HBS_ALARM_ID__LAST ;
|
||||||
|
if ( alarmUtil_getId_enum ( alarm_id_str, id ) == PASS )
|
||||||
|
{
|
||||||
|
if ( id < HBS_ALARM_ID__LAST )
|
||||||
|
{
|
||||||
|
return (&alarm_list[id]) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
wlog ("failed to find alarm data for '%s'\n", alarm_id_str.c_str() );
|
||||||
|
return (NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
const char * identity_str ;
|
||||||
|
alarm_id_enum identity_num ;
|
||||||
|
} alarm_id_table_type ;
|
||||||
|
|
||||||
|
alarm_id_table_type alarm_id_table[HBS_ALARM_ID__LAST];
|
||||||
|
|
||||||
|
|
||||||
|
void alarmData_init ( void )
|
||||||
|
{
|
||||||
|
alarmUtil_type * ptr ;
|
||||||
|
|
||||||
|
alarm_id_table[HBS_ALARM_ID__HB_MGMNT].identity_str = MGMNT_HB_ALARM_ID ;
|
||||||
|
alarm_id_table[HBS_ALARM_ID__HB_MGMNT].identity_num = HBS_ALARM_ID__HB_MGMNT ;
|
||||||
|
alarm_id_table[HBS_ALARM_ID__HB_INFRA].identity_str = INFRA_HB_ALARM_ID;
|
||||||
|
alarm_id_table[HBS_ALARM_ID__HB_INFRA].identity_num = HBS_ALARM_ID__HB_INFRA;
|
||||||
|
alarm_id_table[HBS_ALARM_ID__PMOND].identity_str = PMOND_ALARM_ID;
|
||||||
|
alarm_id_table[HBS_ALARM_ID__PMOND].identity_num = HBS_ALARM_ID__PMOND;
|
||||||
|
alarm_id_table[HBS_ALARM_ID__SERVICE].identity_str = SERVICESTATUS_LOG_ID;
|
||||||
|
alarm_id_table[HBS_ALARM_ID__SERVICE].identity_num = HBS_ALARM_ID__SERVICE;
|
||||||
|
|
||||||
|
/** Management Network Heartbeat Alarm ************************************/
|
||||||
|
|
||||||
|
ptr = &alarm_list[HBS_ALARM_ID__HB_MGMNT];
|
||||||
|
memset (&ptr->alarm, 0, (sizeof(SFmAlarmDataT)));
|
||||||
|
snprintf(&ptr->alarm.alarm_id[0], FM_MAX_BUFFER_LENGTH, "%s", MGMNT_HB_ALARM_ID);
|
||||||
|
|
||||||
|
ptr->name = "Management Network' Heartbeat" ;
|
||||||
|
ptr->instc_prefix = "network=" ;
|
||||||
|
|
||||||
|
ptr->critl_reason = "experienced a persistent critical 'Management Network' "
|
||||||
|
"communication failure.";
|
||||||
|
ptr->major_reason =
|
||||||
|
ptr->minor_reason = "is experiencing intermittent 'Management Network' "
|
||||||
|
"communication failures that have exceeded its lower alarming threshold.";
|
||||||
|
|
||||||
|
ptr->clear_reason = "'Management Network' Heartbeat has 'resumed' if host is 'unlocked' "
|
||||||
|
"or 'stopped' if host is 'locked or deleted'";
|
||||||
|
|
||||||
|
ptr->alarm.alarm_type = FM_ALARM_COMM ;
|
||||||
|
ptr->alarm.probable_cause = FM_ALARM_LOSS_OF_SIGNAL ;
|
||||||
|
ptr->alarm.inhibit_alarms = FM_FALSE;
|
||||||
|
ptr->alarm.service_affecting = FM_TRUE ;
|
||||||
|
ptr->alarm.suppression = FM_TRUE ;
|
||||||
|
|
||||||
|
ptr->alarm.severity = FM_ALARM_SEVERITY_CLEAR ; /* Dynamic */
|
||||||
|
ptr->alarm.alarm_state = FM_ALARM_STATE_CLEAR ; /* Dynamic */
|
||||||
|
|
||||||
|
snprintf( ptr->alarm.proposed_repair_action, FM_MAX_BUFFER_LENGTH,
|
||||||
|
"Check 'Management Network' connectivity and support for multicast messaging."
|
||||||
|
"If problem consistently occurs after that and Host is reset, then"
|
||||||
|
"contact next level of support or lock and replace failing Host.");
|
||||||
|
|
||||||
|
/** Infrastructure Network Heartbeat Alarm ************************************/
|
||||||
|
|
||||||
|
ptr = &alarm_list[HBS_ALARM_ID__HB_INFRA];
|
||||||
|
memset (&ptr->alarm, 0, (sizeof(SFmAlarmDataT)));
|
||||||
|
snprintf(&ptr->alarm.alarm_id[0], FM_MAX_BUFFER_LENGTH, "%s", INFRA_HB_ALARM_ID);
|
||||||
|
|
||||||
|
ptr->name = "Infrastructure Network' Heartbeat" ;
|
||||||
|
ptr->instc_prefix = "network=" ;
|
||||||
|
|
||||||
|
ptr->critl_reason = "experienced a persistent critical 'Infrastructure Network' "
|
||||||
|
"communication failure.";
|
||||||
|
|
||||||
|
ptr->major_reason =
|
||||||
|
ptr->minor_reason = "is experiencing intermittent 'Infrastructure Network' "
|
||||||
|
"communication failures that have exceeded its lower alarming threshold.";
|
||||||
|
|
||||||
|
ptr->clear_reason = "'Infrastructure Network' Heartbeat has 'resumed' if host is 'unlocked' "
|
||||||
|
"or 'stopped' if host is 'locked or deleted'";
|
||||||
|
|
||||||
|
ptr->alarm.alarm_type = FM_ALARM_COMM ;
|
||||||
|
ptr->alarm.probable_cause = FM_ALARM_LOSS_OF_SIGNAL ;
|
||||||
|
ptr->alarm.inhibit_alarms = FM_FALSE;
|
||||||
|
ptr->alarm.service_affecting = FM_TRUE ;
|
||||||
|
ptr->alarm.suppression = FM_TRUE ;
|
||||||
|
|
||||||
|
ptr->alarm.severity = FM_ALARM_SEVERITY_CLEAR ; /* Dynamic */
|
||||||
|
ptr->alarm.alarm_state = FM_ALARM_STATE_CLEAR ; /* Dynamic */
|
||||||
|
|
||||||
|
snprintf( ptr->alarm.proposed_repair_action, FM_MAX_BUFFER_LENGTH,
|
||||||
|
"Check 'Infrastructure Network' connectivity and support for multicast messaging."
|
||||||
|
"If problem consistently occurs after that and Host is reset, then"
|
||||||
|
"contact next level of support or lock and replace failing Host.");
|
||||||
|
|
||||||
|
/** Process Failure Alarm ****************************************************/
|
||||||
|
|
||||||
|
ptr = &alarm_list[HBS_ALARM_ID__PMOND];
|
||||||
|
memset (&ptr->alarm, 0, (sizeof(SFmAlarmDataT)));
|
||||||
|
snprintf(&ptr->alarm.alarm_id[0], FM_MAX_BUFFER_LENGTH, "%s", PMOND_ALARM_ID);
|
||||||
|
|
||||||
|
ptr->name = "Process Monitor Failure" ;
|
||||||
|
ptr->instc_prefix = "process=" ;
|
||||||
|
|
||||||
|
ptr->critl_reason =
|
||||||
|
ptr->minor_reason =
|
||||||
|
ptr->major_reason = "'Process Monitor' (pmond) process is not running or functioning properly. "
|
||||||
|
"The system is trying to recover this process." ;
|
||||||
|
ptr->clear_reason = "Process Monitor has been successfully recovered and is functioning properly.";
|
||||||
|
|
||||||
|
ptr->alarm.alarm_type = FM_ALARM_OPERATIONAL ;
|
||||||
|
ptr->alarm.probable_cause = FM_ALARM_CAUSE_UNKNOWN;
|
||||||
|
ptr->alarm.inhibit_alarms = FM_FALSE;
|
||||||
|
ptr->alarm.service_affecting = FM_FALSE;
|
||||||
|
ptr->alarm.suppression = FM_TRUE ;
|
||||||
|
|
||||||
|
ptr->alarm.severity = FM_ALARM_SEVERITY_CLEAR ; /* Dynamic */
|
||||||
|
ptr->alarm.alarm_state = FM_ALARM_STATE_CLEAR ; /* Dynamic */
|
||||||
|
|
||||||
|
snprintf (ptr->alarm.proposed_repair_action, FM_MAX_BUFFER_LENGTH,
|
||||||
|
"If this alarm does not automatically clear after some time and "
|
||||||
|
"continues to be asserted after Host is locked and unlocked then "
|
||||||
|
"contact next level of support for root cause analysis and recovery.");
|
||||||
|
|
||||||
|
/** Service Status Log ****************************************************/
|
||||||
|
|
||||||
|
ptr = &alarm_list[HBS_ALARM_ID__SERVICE];
|
||||||
|
memset (&ptr->alarm, 0, (sizeof(SFmAlarmDataT)));
|
||||||
|
snprintf(&ptr->alarm.alarm_id[0], FM_MAX_BUFFER_LENGTH, "%s", SERVICESTATUS_LOG_ID);
|
||||||
|
|
||||||
|
ptr->name = "Service Status" ;
|
||||||
|
|
||||||
|
ptr->minor_reason =
|
||||||
|
ptr->major_reason =
|
||||||
|
ptr->critl_reason =
|
||||||
|
ptr->clear_reason = "";
|
||||||
|
|
||||||
|
ptr->alarm.alarm_type = FM_ALARM_TYPE_UNKNOWN ;
|
||||||
|
ptr->alarm.probable_cause = FM_ALARM_CAUSE_UNKNOWN ;
|
||||||
|
ptr->alarm.inhibit_alarms = FM_FALSE ;
|
||||||
|
ptr->alarm.service_affecting = FM_FALSE ;
|
||||||
|
ptr->alarm.suppression = FM_FALSE ;
|
||||||
|
|
||||||
|
ptr->alarm.severity = FM_ALARM_SEVERITY_CLEAR ; /* Dynamic */
|
||||||
|
ptr->alarm.alarm_state = FM_ALARM_STATE_MSG ; /* Dynamic */
|
||||||
|
|
||||||
|
snprintf ( ptr->alarm.proposed_repair_action, FM_MAX_BUFFER_LENGTH, "%s", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Translate alarm identity enum to alarm identity string */
|
||||||
|
string _getIdentity ( alarm_id_enum id )
|
||||||
|
{
|
||||||
|
if ( id < HBS_ALARM_ID__LAST )
|
||||||
|
return ( alarm_id_table[id].identity_str) ;
|
||||||
|
return ("200.000");
|
||||||
|
}
|
134
mtce-common/cgts-mtce-common-1.0/alarm/alarmHdlr.cpp
Normal file
134
mtce-common/cgts-mtce-common-1.0/alarm/alarmHdlr.cpp
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016-2017 Wind River Systems, Inc.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Wind River Titanium Cloud Maintenance Alarm Manager Daemon Handler
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <unistd.h> /* for close and usleep */
|
||||||
|
#include <json-c/json.h> /* for ... json-c json string parsing */
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
#define __MODULE_PRIVATE__
|
||||||
|
|
||||||
|
#include "alarm.h" /* module header */
|
||||||
|
#include "jsonUtil.h" /* for ... jsonUtil_ utiltiies */
|
||||||
|
#include "nodeTimers.h" /* for ... maintenance timers */
|
||||||
|
#include "daemon_common.h" /* for UNUSED() */
|
||||||
|
|
||||||
|
void daemon_sigchld_hdlr ( void ) { ; }
|
||||||
|
|
||||||
|
|
||||||
|
/** Daemon timer handler */
|
||||||
|
void _timer_handler ( int sig, siginfo_t *si, void *uc)
|
||||||
|
{
|
||||||
|
timer_t * tid_ptr = (void**)si->si_value.sival_ptr ;
|
||||||
|
UNUSED(sig);
|
||||||
|
UNUSED(uc);
|
||||||
|
if ( !(*tid_ptr) )
|
||||||
|
{
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mtcTimer_stop_tid_int_safe (tid_ptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int alarmHdlr_request_handler ( char * msg_ptr )
|
||||||
|
{
|
||||||
|
int rc = FAIL_JSON_PARSE ;
|
||||||
|
struct json_object *raw_obj = json_tokener_parse( msg_ptr );
|
||||||
|
jlog ("Alarm Request: %s\n", msg_ptr );
|
||||||
|
if ( raw_obj )
|
||||||
|
{
|
||||||
|
int elements ;
|
||||||
|
|
||||||
|
/* Check response sanity */
|
||||||
|
rc = jsonUtil_array_elements ( msg_ptr, MTCALARM_REQ_LABEL, elements );
|
||||||
|
if ( elements )
|
||||||
|
{
|
||||||
|
#define PARSE_FAILURE ((const char *)"failed to parse value for key")
|
||||||
|
string alarmid = "" ;
|
||||||
|
string hostname = "" ;
|
||||||
|
string operation = "" ;
|
||||||
|
string severity = "" ;
|
||||||
|
string entity = "" ;
|
||||||
|
string prefix = "" ;
|
||||||
|
string alarm_req = "" ;
|
||||||
|
|
||||||
|
for ( int i = 0 ; i < elements ; i++ )
|
||||||
|
{
|
||||||
|
if ( ( rc = jsonUtil_get_array_idx ( msg_ptr, MTCALARM_REQ_LABEL, i, alarm_req ) ) == PASS )
|
||||||
|
{
|
||||||
|
if (( rc = jsonUtil_get_key_val ( (char*)alarm_req.data(), MTCALARM_REQ_KEY__ALARMID, alarmid )) != PASS )
|
||||||
|
{
|
||||||
|
elog ("%s '%s'\n", PARSE_FAILURE, MTCALARM_REQ_KEY__ALARMID);
|
||||||
|
}
|
||||||
|
else if (( rc = jsonUtil_get_key_val ( (char*)alarm_req.data(), MTCALARM_REQ_KEY__HOSTNAME, hostname )) != PASS )
|
||||||
|
{
|
||||||
|
elog ("%s '%s'\n", PARSE_FAILURE, MTCALARM_REQ_KEY__HOSTNAME);
|
||||||
|
}
|
||||||
|
else if (( rc = jsonUtil_get_key_val ( (char*)alarm_req.data(), MTCALARM_REQ_KEY__OPERATION, operation )) != PASS )
|
||||||
|
{
|
||||||
|
elog ("%s '%s'\n", PARSE_FAILURE, MTCALARM_REQ_KEY__OPERATION);
|
||||||
|
}
|
||||||
|
else if (( rc = jsonUtil_get_key_val ( (char*)alarm_req.data(), MTCALARM_REQ_KEY__SEVERITY, severity)) != PASS )
|
||||||
|
{
|
||||||
|
elog ("%s '%s'\n", PARSE_FAILURE, MTCALARM_REQ_KEY__SEVERITY);
|
||||||
|
}
|
||||||
|
else if (( rc = jsonUtil_get_key_val ( (char*)alarm_req.data(), MTCALARM_REQ_KEY__ENTITY, entity )) != PASS )
|
||||||
|
{
|
||||||
|
elog ("%s '%s'\n", PARSE_FAILURE, MTCALARM_REQ_KEY__ENTITY);
|
||||||
|
}
|
||||||
|
else if (( rc = jsonUtil_get_key_val ( (char*)alarm_req.data(), MTCALARM_REQ_KEY__PREFIX, prefix)) != PASS )
|
||||||
|
{
|
||||||
|
elog ("%s '%s'\n", PARSE_FAILURE, MTCALARM_REQ_KEY__PREFIX);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
jlog ("Alarm Message has %d requests\n", elements );
|
||||||
|
rc = alarmMgr_manage_alarm ( alarmid,
|
||||||
|
hostname,
|
||||||
|
tolowercase(operation),
|
||||||
|
tolowercase(severity),
|
||||||
|
entity,
|
||||||
|
prefix);
|
||||||
|
}
|
||||||
|
if ( rc ) break ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
wlog ("failed to get index '%d of %d' from alarm request", i, elements);
|
||||||
|
}
|
||||||
|
} /* for loop */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
elog ("failed to find '%s' label in json object\n", MTCALARM_REQ_LABEL );
|
||||||
|
elog (" ... %s\n", msg_ptr );
|
||||||
|
rc = FAIL_JSON_OBJECT ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
elog ("failed to parse json request\n");
|
||||||
|
elog (" ... %s\n", msg_ptr );
|
||||||
|
rc = FAIL_JSON_OBJECT ;
|
||||||
|
}
|
||||||
|
if (raw_obj) json_object_put(raw_obj);
|
||||||
|
return (rc);
|
||||||
|
}
|
305
mtce-common/cgts-mtce-common-1.0/alarm/alarmInit.cpp
Normal file
305
mtce-common/cgts-mtce-common-1.0/alarm/alarmInit.cpp
Normal file
@ -0,0 +1,305 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016-2017 Wind River Systems, Inc.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Wind River Titanium Cloud Maintenance Alarm Manager Daemon Initialization
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <unistd.h> /* for close and usleep */
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
#define __MODULE_PRIVATE__
|
||||||
|
|
||||||
|
#include "daemon_ini.h" /* Ini Parser Header */
|
||||||
|
#include "daemon_common.h" /* Common definitions and types for daemons */
|
||||||
|
#include "daemon_option.h" /* Common options for daemons */
|
||||||
|
|
||||||
|
#include "alarm.h" /* module header */
|
||||||
|
#include "msgClass.h" /* for ... socket message setup */
|
||||||
|
|
||||||
|
/** Local Identity */
|
||||||
|
static string my_hostname = "" ;
|
||||||
|
static string my_local_ip = "" ;
|
||||||
|
static string my_float_ip = "" ;
|
||||||
|
|
||||||
|
|
||||||
|
/** Maintenance Alarm request socket and port - UDP over lo */
|
||||||
|
msgClassSock * mtcalarm_req_sock_ptr = NULL ;
|
||||||
|
int mtcalarm_req_port = 0 ;
|
||||||
|
|
||||||
|
|
||||||
|
/** Common Daemon Config Struct */
|
||||||
|
static daemon_config_type _config ;
|
||||||
|
daemon_config_type * daemon_get_cfg_ptr () { return &_config ; }
|
||||||
|
|
||||||
|
|
||||||
|
/* Cleanup exit handler */
|
||||||
|
void daemon_exit ( void )
|
||||||
|
{
|
||||||
|
daemon_dump_info ();
|
||||||
|
daemon_files_fini ();
|
||||||
|
|
||||||
|
/* Close sockets */
|
||||||
|
if ( mtcalarm_req_sock_ptr )
|
||||||
|
{
|
||||||
|
delete (mtcalarm_req_sock_ptr );
|
||||||
|
mtcalarm_req_sock_ptr = NULL ;
|
||||||
|
mtcalarm_req_port = 0 ;
|
||||||
|
}
|
||||||
|
exit (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** Client Config mask */
|
||||||
|
#define CONFIG_CLIENT_MASK (CONFIG_CLIENT_PULSE_PORT)
|
||||||
|
|
||||||
|
/* Startup config read */
|
||||||
|
static int _config_handler ( void * user,
|
||||||
|
const char * section,
|
||||||
|
const char * name,
|
||||||
|
const char * value)
|
||||||
|
{
|
||||||
|
daemon_config_type* config_ptr = (daemon_config_type*)user;
|
||||||
|
|
||||||
|
if (MATCH("client", "mtcalarm_req_port"))
|
||||||
|
{
|
||||||
|
config_ptr->mtcalarm_req_port = atoi(value);
|
||||||
|
config_ptr->mask |= CONFIG_CLIENT_PULSE_PORT ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return (PASS);
|
||||||
|
}
|
||||||
|
return (FAIL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Configure the daemon */
|
||||||
|
int daemon_configure ( void )
|
||||||
|
{
|
||||||
|
int rc = FAIL ;
|
||||||
|
|
||||||
|
if (ini_parse(MTCE_CONF_FILE, _config_handler, &_config) < 0)
|
||||||
|
{
|
||||||
|
elog("Failed to load '%s'\n", MTCE_CONF_FILE );
|
||||||
|
return(FAIL_LOAD_INI);
|
||||||
|
}
|
||||||
|
|
||||||
|
get_debug_options ( MTCE_CONF_FILE, &_config );
|
||||||
|
|
||||||
|
/* Verify loaded config against an expected mask
|
||||||
|
* as an ini file fault detection method */
|
||||||
|
if ( _config.mask != CONFIG_CLIENT_MASK )
|
||||||
|
{
|
||||||
|
elog ("Client configuration failed (%x)\n",
|
||||||
|
(( -1 ^ _config.mask ) & CONFIG_CLIENT_MASK) );
|
||||||
|
rc = FAIL_INI_CONFIG ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ilog("Alarm Port : %d\n", _config.mtcalarm_req_port );
|
||||||
|
rc = PASS ;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (rc);
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************/
|
||||||
|
/* Initialization Utilities */
|
||||||
|
/****************************/
|
||||||
|
|
||||||
|
int daemon_socket_init ( void )
|
||||||
|
{
|
||||||
|
int rc = PASS ;
|
||||||
|
|
||||||
|
/***********************************************************/
|
||||||
|
/* Setup the Alarm Request Receiver Socket */
|
||||||
|
/***********************************************************/
|
||||||
|
|
||||||
|
mtcalarm_req_sock_ptr = new msgClassRx ( LOOPBACK_IP, _config.mtcalarm_req_port, IPPROTO_UDP);
|
||||||
|
if (rc)
|
||||||
|
return (rc) ;
|
||||||
|
if (mtcalarm_req_sock_ptr)
|
||||||
|
mtcalarm_req_sock_ptr->sock_ok(true);
|
||||||
|
|
||||||
|
return (rc);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* The main heartbeat service loop */
|
||||||
|
int daemon_init ( string iface, string nodeType_str )
|
||||||
|
{
|
||||||
|
int rc = PASS ;
|
||||||
|
UNUSED(nodeType_str);
|
||||||
|
|
||||||
|
/* Assign interface to config */
|
||||||
|
_config.mgmnt_iface = (char*)iface.data() ;
|
||||||
|
|
||||||
|
if ((rc = daemon_files_init ()) != PASS)
|
||||||
|
{
|
||||||
|
elog ("daemon_files_init failed (rc:%d)\n", rc );
|
||||||
|
return ( FAIL_FILES_INIT );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Bind signal handlers */
|
||||||
|
if ((rc = daemon_signal_init ()) != PASS)
|
||||||
|
{
|
||||||
|
elog ("daemon_signal_init failed (rc:%d)\n", rc );
|
||||||
|
return ( FAIL_SIGNAL_INIT );
|
||||||
|
}
|
||||||
|
|
||||||
|
/************************************************************************
|
||||||
|
* There is no point continuing with init ; i.e. running daemon_configure,
|
||||||
|
* initializing sockets and trying to query for an ip address until the
|
||||||
|
* daemon's configuration requirements are met. Here we wait for those
|
||||||
|
* flag files to be present before continuing.
|
||||||
|
************************************************************************
|
||||||
|
* Wait for /etc/platform/.initial_config_complete & /var/run/.goenabled */
|
||||||
|
daemon_wait_for_file ( CONFIG_COMPLETE_FILE , 0);
|
||||||
|
daemon_wait_for_file ( GOENABLED_MAIN_READY , 0);
|
||||||
|
|
||||||
|
/* Configure the client */
|
||||||
|
if ((rc = daemon_configure ()) != PASS)
|
||||||
|
{
|
||||||
|
elog ("daemon_configure failed (rc:%d)\n", rc );
|
||||||
|
rc = FAIL_DAEMON_CONFIG ;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Setup messaging sockets */
|
||||||
|
else if ((rc = daemon_socket_init ()) != PASS)
|
||||||
|
{
|
||||||
|
elog ("daemon_socket_init failed (rc:%d)\n", rc );
|
||||||
|
rc = FAIL_SOCKET_INIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
alarmData_init ();
|
||||||
|
|
||||||
|
return (rc);
|
||||||
|
}
|
||||||
|
|
||||||
|
void daemon_service_run ( void )
|
||||||
|
{
|
||||||
|
int rc = PASS ;
|
||||||
|
if (( mtcalarm_req_sock_ptr ) && ( mtcalarm_req_sock_ptr->getFD() ))
|
||||||
|
{
|
||||||
|
std::list<int> socks ;
|
||||||
|
|
||||||
|
/* For select dispatch */
|
||||||
|
struct timeval waitd ;
|
||||||
|
fd_set readfds;
|
||||||
|
|
||||||
|
int failed_receiver_log_throttle = 0 ;
|
||||||
|
int failed_receiver_b2b_count = 0 ;
|
||||||
|
int failed_socket_log_throttle = 0 ;
|
||||||
|
|
||||||
|
socks.clear();
|
||||||
|
socks.push_front (mtcalarm_req_sock_ptr->getFD());
|
||||||
|
socks.sort();
|
||||||
|
|
||||||
|
/* Run service forever */
|
||||||
|
for ( ; ; )
|
||||||
|
{
|
||||||
|
daemon_signal_hdlr ();
|
||||||
|
waitd.tv_sec = 0;
|
||||||
|
waitd.tv_usec = SOCKET_WAIT;
|
||||||
|
|
||||||
|
/* Initialize the master fd_set */
|
||||||
|
FD_ZERO(&readfds);
|
||||||
|
FD_SET( mtcalarm_req_sock_ptr->getFD(), &readfds);
|
||||||
|
rc = select( socks.back()+1, &readfds, NULL, NULL, &waitd);
|
||||||
|
if (( rc < 0 ) || ( rc == 0 ))
|
||||||
|
{
|
||||||
|
if (( rc < 0 ) && ( errno != EINTR ))
|
||||||
|
{
|
||||||
|
wlog_throttled ( failed_socket_log_throttle, 100,
|
||||||
|
"Socket Select Failed (%d:%m)\n", errno);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( FD_ISSET(mtcalarm_req_sock_ptr->getFD(), &readfds))
|
||||||
|
{
|
||||||
|
failed_socket_log_throttle = 0 ;
|
||||||
|
if ( mtcalarm_req_sock_ptr && ( mtcalarm_req_sock_ptr->sock_ok() == true ))
|
||||||
|
{
|
||||||
|
char msg [MAX_ALARM_REQ_SIZE] ;
|
||||||
|
memset ( &msg , 0, MAX_ALARM_REQ_MSG_SIZE );
|
||||||
|
int bytes = mtcalarm_req_sock_ptr->read((char*)&msg, MAX_ALARM_REQ_SIZE-1 );
|
||||||
|
if ( bytes > 0 )
|
||||||
|
{
|
||||||
|
failed_receiver_b2b_count = 0 ;
|
||||||
|
failed_receiver_log_throttle = 0 ;
|
||||||
|
if ( ( rc = alarmHdlr_request_handler ( msg )) != PASS )
|
||||||
|
{
|
||||||
|
wlog ("failed to handle alarm request (rc:%d)\n", rc );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( bytes < 0 )
|
||||||
|
{
|
||||||
|
failed_receiver_b2b_count++ ;
|
||||||
|
wlog_throttled ( failed_receiver_log_throttle, 20, "alarm request receive error ; thresholeded ; (%d:%m)\n", errno );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
failed_receiver_b2b_count++ ;
|
||||||
|
wlog_throttled ( failed_receiver_log_throttle, 20, "alarm request receive ; no data\n" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
elog ("alarm request socket error ; fatal\n");
|
||||||
|
failed_receiver_b2b_count = MAX_FAILED_B2B_RECEIVES_B4_RESTART ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( failed_receiver_b2b_count >= MAX_FAILED_B2B_RECEIVES_B4_RESTART )
|
||||||
|
{
|
||||||
|
/* exit and allow process restart by pmond */
|
||||||
|
elog ("max (%d) alarm request receive errors reached ; forcing process restart\n", MAX_FAILED_B2B_RECEIVES_B4_RESTART );
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
elog ("alarm request socket error ; not initialized ; exiting\n");
|
||||||
|
}
|
||||||
|
daemon_exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Push daemon state to log file */
|
||||||
|
void daemon_dump_info ( void )
|
||||||
|
{
|
||||||
|
daemon_dump_membuf_banner ();
|
||||||
|
daemon_dump_membuf();
|
||||||
|
}
|
||||||
|
|
||||||
|
const char MY_DATA [100] = { "eieio\n" } ;
|
||||||
|
const char * daemon_stream_info ( void )
|
||||||
|
{
|
||||||
|
return (&MY_DATA[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
* *
|
||||||
|
* Module Test Head *
|
||||||
|
* *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
/** Teat Head Entry */
|
||||||
|
int daemon_run_testhead ( void )
|
||||||
|
{
|
||||||
|
int rc = PASS;
|
||||||
|
return (rc);
|
||||||
|
}
|
106
mtce-common/cgts-mtce-common-1.0/alarm/alarmMgr.cpp
Normal file
106
mtce-common/cgts-mtce-common-1.0/alarm/alarmMgr.cpp
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016-2017 Wind River Systems, Inc.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Wind River Titanium Cloud Maintenance Alarm Manager Daemon Manager
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
#define __MODULE_PRIVATE__
|
||||||
|
|
||||||
|
#include "alarm.h" /* module header */
|
||||||
|
|
||||||
|
int alarmMgr_manage_alarm ( string alarmid,
|
||||||
|
string hostname,
|
||||||
|
string operation,
|
||||||
|
string severity,
|
||||||
|
string entity,
|
||||||
|
string prefix)
|
||||||
|
{
|
||||||
|
int rc = PASS ;
|
||||||
|
string action = operation ;
|
||||||
|
action.append (" alarm");
|
||||||
|
EFmAlarmSeverityT sev ;
|
||||||
|
|
||||||
|
ilog ("Alarm: alarmid:%s hostname:%s operation:%s severity:%s entity:%s prefix:%s\n",
|
||||||
|
alarmid.c_str(),
|
||||||
|
hostname.c_str(),
|
||||||
|
operation.c_str(),
|
||||||
|
severity.c_str(),
|
||||||
|
entity.c_str(),
|
||||||
|
prefix.c_str());
|
||||||
|
|
||||||
|
sev = alarmUtil_getSev_enum ( severity );
|
||||||
|
if (!operation.compare("msg"))
|
||||||
|
{
|
||||||
|
if ( sev == FM_ALARM_SEVERITY_WARNING )
|
||||||
|
{
|
||||||
|
//if ( prefix.compare("none"))
|
||||||
|
alarmUtil_warning_log ( hostname, alarmid, entity, prefix );
|
||||||
|
//else
|
||||||
|
// mtcAlarm_warning_log ( hostname, id, entity );
|
||||||
|
}
|
||||||
|
else if ( sev == FM_ALARM_SEVERITY_MINOR )
|
||||||
|
{
|
||||||
|
rc = alarmUtil_minor_log ( hostname, alarmid, entity );
|
||||||
|
}
|
||||||
|
else if ( sev == FM_ALARM_SEVERITY_MAJOR)
|
||||||
|
{
|
||||||
|
rc = alarmUtil_major_log ( hostname, alarmid, entity );
|
||||||
|
}
|
||||||
|
else if ( sev == FM_ALARM_SEVERITY_CRITICAL )
|
||||||
|
{
|
||||||
|
rc = alarmUtil_critical_log ( hostname, alarmid, entity );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rc = FAIL_INVALID_OPERATION ;
|
||||||
|
wlog ("Unsupported log severity '%d:%s'\n", sev, severity.c_str());
|
||||||
|
}
|
||||||
|
action="create log" ;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get the state */
|
||||||
|
else if ( !operation.compare("clear"))
|
||||||
|
{
|
||||||
|
rc = alarmUtil_clear ( hostname, alarmid, entity );
|
||||||
|
}
|
||||||
|
|
||||||
|
else if ( !operation.compare("set") )
|
||||||
|
{
|
||||||
|
if ( sev == FM_ALARM_SEVERITY_WARNING )
|
||||||
|
rc = alarmUtil_warning ( hostname, alarmid, entity );
|
||||||
|
else if ( sev == FM_ALARM_SEVERITY_MINOR )
|
||||||
|
rc = alarmUtil_minor ( hostname, alarmid, entity );
|
||||||
|
else if ( sev == FM_ALARM_SEVERITY_MAJOR )
|
||||||
|
rc = alarmUtil_major ( hostname, alarmid, entity );
|
||||||
|
else if ( sev == FM_ALARM_SEVERITY_CRITICAL )
|
||||||
|
rc = alarmUtil_critical ( hostname, alarmid, entity );
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rc = FAIL_INVALID_OPERATION ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rc = FAIL_BAD_CASE ;
|
||||||
|
}
|
||||||
|
if ( rc )
|
||||||
|
{
|
||||||
|
elog ("%s failed to %s '%s:%s'\n", hostname.c_str(), action.c_str(), alarmid.c_str(), entity.c_str() )
|
||||||
|
}
|
||||||
|
|
||||||
|
return (rc);
|
||||||
|
}
|
||||||
|
|
500
mtce-common/cgts-mtce-common-1.0/alarm/alarmUtil.cpp
Normal file
500
mtce-common/cgts-mtce-common-1.0/alarm/alarmUtil.cpp
Normal file
@ -0,0 +1,500 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2013 Wind River Systems, Inc.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Wind River CGCS Platform common Alarm utilities
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define __MODULE_PRIVATE__
|
||||||
|
|
||||||
|
#include "daemon_common.h" /* for ... daemon_is_file_present */
|
||||||
|
|
||||||
|
#include "nodeBase.h"
|
||||||
|
#include "nodeUtil.h" /* for ... get_mtclogd_sockPtr */
|
||||||
|
#include "alarm.h" /* for ... alarm Utilities */
|
||||||
|
|
||||||
|
|
||||||
|
string alarmUtil_getSev_str ( EFmAlarmSeverityT sev )
|
||||||
|
{
|
||||||
|
switch ( sev )
|
||||||
|
{
|
||||||
|
case FM_ALARM_SEVERITY_CLEAR: return ("clear");
|
||||||
|
case FM_ALARM_SEVERITY_WARNING: return ("warning");
|
||||||
|
case FM_ALARM_SEVERITY_MINOR: return ("minor");
|
||||||
|
case FM_ALARM_SEVERITY_MAJOR: return ("major");
|
||||||
|
case FM_ALARM_SEVERITY_CRITICAL:return ("critical");
|
||||||
|
default : return ("unknown");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
EFmAlarmSeverityT alarmUtil_getSev_enum ( string sev )
|
||||||
|
{
|
||||||
|
if ( !sev.compare("clear")) return (FM_ALARM_SEVERITY_CLEAR) ;
|
||||||
|
if ( !sev.compare("warning")) return (FM_ALARM_SEVERITY_WARNING);
|
||||||
|
if ( !sev.compare("minor")) return (FM_ALARM_SEVERITY_MINOR);
|
||||||
|
if ( !sev.compare("major")) return (FM_ALARM_SEVERITY_MAJOR);
|
||||||
|
if ( !sev.compare("critical")) return (FM_ALARM_SEVERITY_CRITICAL);
|
||||||
|
wlog ("Unsupported severity '%s'\n", sev.c_str() );
|
||||||
|
return (FM_ALARM_SEVERITY_CLEAR) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
int alarmUtil_getId_enum ( string alarmid, alarm_id_enum & id )
|
||||||
|
{
|
||||||
|
/* Get the ID */
|
||||||
|
if ( alarmid.compare(INFRA_HB_ALARM_ID) == 0 )
|
||||||
|
{
|
||||||
|
id = HBS_ALARM_ID__HB_INFRA ;
|
||||||
|
}
|
||||||
|
else if ( alarmid.compare(MGMNT_HB_ALARM_ID) == 0 )
|
||||||
|
{
|
||||||
|
id = HBS_ALARM_ID__HB_MGMNT ;
|
||||||
|
}
|
||||||
|
else if ( alarmid.compare(PMOND_ALARM_ID) == 0 )
|
||||||
|
{
|
||||||
|
id = HBS_ALARM_ID__PMOND ;
|
||||||
|
}
|
||||||
|
else if ( alarmid.compare(SERVICESTATUS_LOG_ID) == 0 )
|
||||||
|
{
|
||||||
|
id = HBS_ALARM_ID__SERVICE ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
wlog ("Unsupported alarm id '%s'\n", alarmid.c_str());
|
||||||
|
return (FAIL_BAD_PARM);
|
||||||
|
}
|
||||||
|
return (PASS);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* update the passed in alarm struct's instance_id entity path for the specified host */
|
||||||
|
void _build_entity_path ( string & hostname, string & instance, SFmAlarmDataT & alarm )
|
||||||
|
{
|
||||||
|
snprintf ( &alarm.entity_type_id[0], FM_MAX_BUFFER_LENGTH, "system.host" );
|
||||||
|
|
||||||
|
if ( instance.empty() )
|
||||||
|
{
|
||||||
|
snprintf ( &alarm.entity_instance_id[0], FM_MAX_BUFFER_LENGTH, "%s%s",
|
||||||
|
ENTITY_PREFIX, hostname.data());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
snprintf ( &alarm.entity_instance_id[0], FM_MAX_BUFFER_LENGTH, "%s%s.%s",
|
||||||
|
ENTITY_PREFIX, hostname.data(), instance.data());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void alarmUtil_clear_all ( string hostname )
|
||||||
|
{
|
||||||
|
SFmAlarmDataT alarm ;
|
||||||
|
string instance = "" ;
|
||||||
|
|
||||||
|
_build_entity_path ( hostname, instance, alarm );
|
||||||
|
|
||||||
|
/* This will clear all the alarms for this host ;
|
||||||
|
* even ones that are raised against this host by other daemons */
|
||||||
|
fm_clear_all ( &alarm.entity_instance_id );
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Name : alarmUtil_query
|
||||||
|
*
|
||||||
|
* Description: Utility will query a specific alarm for its current severity
|
||||||
|
*
|
||||||
|
* @param : identity may be 200.xxx
|
||||||
|
*
|
||||||
|
* @param : instance may be
|
||||||
|
*
|
||||||
|
* host=<hostname>
|
||||||
|
*
|
||||||
|
* example:
|
||||||
|
*
|
||||||
|
* hostname=compute-1
|
||||||
|
*
|
||||||
|
* host=<hostname>.<function>=<specific>
|
||||||
|
*
|
||||||
|
* example:
|
||||||
|
*
|
||||||
|
* hostname=compute-1.process=mtcClient
|
||||||
|
*
|
||||||
|
* hostname=compute-1.sensor=Fan_PSU2
|
||||||
|
*
|
||||||
|
* Updates : None
|
||||||
|
*
|
||||||
|
* Returns : FM severity code for the specified alarm.
|
||||||
|
* FM_ALARM_SEVERITY_CLEAR if it not set.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
EFmAlarmSeverityT alarmUtil_query ( string hostname,
|
||||||
|
string identity,
|
||||||
|
string instance )
|
||||||
|
{
|
||||||
|
SFmAlarmDataT alarm_query ;
|
||||||
|
AlarmFilter alarm_filter ;
|
||||||
|
EFmErrorT rc ;
|
||||||
|
|
||||||
|
memset(&alarm_query, 0, sizeof(alarm_query));
|
||||||
|
memset(&alarm_filter, 0, sizeof(alarm_filter));
|
||||||
|
|
||||||
|
snprintf ( &alarm_filter.alarm_id[0], FM_MAX_BUFFER_LENGTH, "%s", identity.data());
|
||||||
|
|
||||||
|
if ( instance.empty() )
|
||||||
|
{
|
||||||
|
snprintf ( &alarm_filter.entity_instance_id[0], FM_MAX_BUFFER_LENGTH, "%s%s",
|
||||||
|
ENTITY_PREFIX, hostname.data());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
snprintf ( &alarm_filter.entity_instance_id[0], FM_MAX_BUFFER_LENGTH, "%s%s.%s",
|
||||||
|
ENTITY_PREFIX, hostname.data(), instance.data());
|
||||||
|
}
|
||||||
|
|
||||||
|
alog ("entity_instance:%s\n", alarm_filter.entity_instance_id );
|
||||||
|
if (( rc = fm_get_fault ( &alarm_filter, &alarm_query )) == FM_ERR_OK )
|
||||||
|
{
|
||||||
|
dlog ("Found with Severity: %d\n", alarm_query.severity );
|
||||||
|
return (alarm_query.severity) ;
|
||||||
|
}
|
||||||
|
else if ( rc != FM_ERR_ENTITY_NOT_FOUND )
|
||||||
|
{
|
||||||
|
elog ("%s fm_get_fault returned error (%d)\n", hostname.c_str(), rc );
|
||||||
|
}
|
||||||
|
return (FM_ALARM_SEVERITY_CLEAR);
|
||||||
|
}
|
||||||
|
|
||||||
|
int alarmUtil_query_identity ( string identity, SFmAlarmDataT * alarm_list_ptr, unsigned int max_alarms )
|
||||||
|
{
|
||||||
|
int rc = 0 ;
|
||||||
|
|
||||||
|
if ( max_alarms == 0 )
|
||||||
|
{
|
||||||
|
slog ("max alarms is zero !\n");
|
||||||
|
}
|
||||||
|
else if ( identity.empty() )
|
||||||
|
{
|
||||||
|
slog ("empty alarm 'identity'\n");
|
||||||
|
}
|
||||||
|
else if ( alarm_list_ptr )
|
||||||
|
{
|
||||||
|
AlarmFilter alarm_filter ;
|
||||||
|
|
||||||
|
memset(&alarm_filter, 0, sizeof(alarm_filter));
|
||||||
|
snprintf ( alarm_filter.alarm_id, FM_MAX_BUFFER_LENGTH, "%s", identity.data());
|
||||||
|
rc = fm_get_faults_by_id ( &alarm_filter.alarm_id, alarm_list_ptr, &max_alarms );
|
||||||
|
alog ("%s fm_get_faults_by_id rc = %d\n", alarm_filter.alarm_id, rc );
|
||||||
|
if ( rc == FM_ERR_OK )
|
||||||
|
{
|
||||||
|
return (PASS);
|
||||||
|
}
|
||||||
|
else if ( rc == FM_ERR_ENTITY_NOT_FOUND )
|
||||||
|
{
|
||||||
|
return (RETRY);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return (FAIL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
slog ("caller supplied null alarm_list_ptr\n");
|
||||||
|
}
|
||||||
|
return (FAIL_NULL_POINTER);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*********************************************************************************
|
||||||
|
*
|
||||||
|
* Name : alarmUtil
|
||||||
|
*
|
||||||
|
* Purpose : Primary module API used to set/clear severity alarms and logs in FM.
|
||||||
|
*
|
||||||
|
* Description : Other maintenance services are expected to use ths interface to
|
||||||
|
*
|
||||||
|
*
|
||||||
|
********************************************************************************/
|
||||||
|
int alarmUtil ( string & hostname,
|
||||||
|
string & identity,
|
||||||
|
string & instance,
|
||||||
|
SFmAlarmDataT & alarm )
|
||||||
|
{
|
||||||
|
int rc = PASS ;
|
||||||
|
|
||||||
|
// msgSock_type * mtclogd_ptr = get_mtclogd_sockPtr() ;
|
||||||
|
|
||||||
|
/* Don't report events while we are in reset mode */
|
||||||
|
if ( daemon_is_file_present ( NODE_RESET_FILE ) )
|
||||||
|
{
|
||||||
|
return (rc);
|
||||||
|
}
|
||||||
|
|
||||||
|
_build_entity_path ( hostname, instance, alarm );
|
||||||
|
|
||||||
|
#ifdef WANT_ALARM_QUERY
|
||||||
|
|
||||||
|
/* See if the alarm is already in the requested state */
|
||||||
|
EFmAlarmSeverityT curr_sev = alarmUtil_query ( hostname, identity, instance ) ;
|
||||||
|
|
||||||
|
/* If its not a log message and we are already at this
|
||||||
|
* severity level then ignore the call */
|
||||||
|
if (( alarm.alarm_state != FM_ALARM_STATE_MSG ) &&
|
||||||
|
( curr_sev == alarm.severity ))
|
||||||
|
{
|
||||||
|
ilog ("%s %s %s already at desired (%s) severity level\n",
|
||||||
|
hostname.c_str(),
|
||||||
|
identity.c_str(),
|
||||||
|
instance.c_str(),
|
||||||
|
alarmUtil_getSev_str(alarm.severity).c_str());
|
||||||
|
return (rc);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
snprintf(&alarm.alarm_id[0], FM_MAX_BUFFER_LENGTH, "%s", identity.data());
|
||||||
|
|
||||||
|
if (( alarm.alarm_state == FM_ALARM_STATE_SET ) ||
|
||||||
|
( alarm.alarm_state == FM_ALARM_STATE_MSG ))
|
||||||
|
{
|
||||||
|
if ( alarm.alarm_state == FM_ALARM_STATE_SET )
|
||||||
|
{
|
||||||
|
alog ("%s setting %s %s alarm\n", hostname.c_str(), alarm.alarm_id, alarm.entity_instance_id );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
alog ("%s creating %s %s log\n", hostname.c_str(), alarm.alarm_id, alarm.entity_instance_id );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Debug Logs */
|
||||||
|
alog ("%s Alarm Reason: %s\n", hostname.c_str(), alarm.reason_text );
|
||||||
|
alog ("%s Alarm Action: %s\n", hostname.c_str(), alarm.proposed_repair_action );
|
||||||
|
alog ("%s Alarm Ident : %s : %s\n", hostname.c_str(), alarm.entity_type_id, alarm.entity_instance_id );
|
||||||
|
alog ("%s Alarm State : state:%d sev:%d type:%d cause:%d sa:%c supp:%c\n",
|
||||||
|
hostname.c_str(),
|
||||||
|
alarm.alarm_state,
|
||||||
|
alarm.severity,
|
||||||
|
alarm.alarm_type,
|
||||||
|
alarm.probable_cause,
|
||||||
|
alarm.service_affecting ? 'Y' : 'N',
|
||||||
|
alarm.suppression ? 'Y' : 'N' );
|
||||||
|
|
||||||
|
ilog ( "fm_set_fault: %s %s state:%d sev:%d type:%d cause:%d sa:%c supp:%c",
|
||||||
|
hostname.c_str(),
|
||||||
|
alarm.alarm_id,
|
||||||
|
alarm.alarm_state,
|
||||||
|
alarm.severity,
|
||||||
|
alarm.alarm_type,
|
||||||
|
alarm.probable_cause,
|
||||||
|
alarm.service_affecting ? 'Y' : 'N',
|
||||||
|
alarm.suppression ? 'Y' : 'N' );
|
||||||
|
|
||||||
|
rc = fm_set_fault ( &alarm , NULL );
|
||||||
|
if ( rc != FM_ERR_OK )
|
||||||
|
{
|
||||||
|
wlog ("%s fm_set_fault call failed for alarm %s (rc:%d) ; retrying\n", hostname.c_str(), alarm.alarm_id, rc);
|
||||||
|
usleep (100000); /* sleep 100 msec */
|
||||||
|
rc = fm_set_fault ( &alarm , NULL );
|
||||||
|
if ( rc != FM_ERR_OK )
|
||||||
|
{
|
||||||
|
elog ("%s failed to set alarm %s (rc:%d) ; giving up\n", hostname.c_str(), alarm.alarm_id, rc);
|
||||||
|
rc = FAIL ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AlarmFilter filter ; memset(&filter, 0, sizeof(filter));
|
||||||
|
|
||||||
|
/* Setup the alarm filter */
|
||||||
|
snprintf(filter.alarm_id, FM_MAX_BUFFER_LENGTH, "%s", alarm.alarm_id);
|
||||||
|
snprintf(filter.entity_instance_id, FM_MAX_BUFFER_LENGTH, "%s", alarm.entity_instance_id);
|
||||||
|
|
||||||
|
alog ( "fm_clear_fault: %s %s:%s", hostname.c_str(), alarm.entity_instance_id, alarm.alarm_id );
|
||||||
|
|
||||||
|
ilog ("%s clearing %s %s alarm\n", hostname.c_str(), alarm.alarm_id, alarm.entity_instance_id);
|
||||||
|
if ( ( rc = fm_clear_fault ( &filter )) != FM_ERR_OK )
|
||||||
|
{
|
||||||
|
if ( rc != FM_ERR_ENTITY_NOT_FOUND )
|
||||||
|
{
|
||||||
|
elog ("%s failed to fm_clear_fault (rc:%d)\n", hostname.c_str(), rc );
|
||||||
|
rc = FAIL ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rc = PASS ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (rc);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Clear the specified hosts's alarm */
|
||||||
|
int alarmUtil_clear ( string hostname, string alarm_id , string entity )
|
||||||
|
{
|
||||||
|
alarmUtil_type * alarm_ptr = alarmData_getAlarm_ptr(alarm_id);
|
||||||
|
if ( alarm_ptr )
|
||||||
|
{
|
||||||
|
string instance = alarm_ptr->instc_prefix ;
|
||||||
|
instance.append(entity);
|
||||||
|
|
||||||
|
alarm_ptr->alarm.severity = FM_ALARM_SEVERITY_CLEAR ;
|
||||||
|
alarm_ptr->alarm.alarm_state = FM_ALARM_STATE_CLEAR ;
|
||||||
|
return ( alarmUtil ( hostname, alarm_id, instance, alarm_ptr->alarm ));
|
||||||
|
}
|
||||||
|
return (FAIL_NULL_POINTER);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Assert a specified hosts's alarm with a CRITICAL severity level */
|
||||||
|
int alarmUtil_critical ( string hostname, string alarm_id , string entity )
|
||||||
|
{
|
||||||
|
alarmUtil_type * alarm_ptr = alarmData_getAlarm_ptr(alarm_id);
|
||||||
|
if ( alarm_ptr )
|
||||||
|
{
|
||||||
|
string instance = alarm_ptr->instc_prefix ;
|
||||||
|
instance.append(entity);
|
||||||
|
|
||||||
|
alarm_ptr->alarm.severity = FM_ALARM_SEVERITY_CRITICAL ;
|
||||||
|
alarm_ptr->alarm.alarm_state = FM_ALARM_STATE_SET ;
|
||||||
|
|
||||||
|
snprintf ( alarm_ptr->alarm.reason_text, FM_MAX_BUFFER_LENGTH, "%s %s", hostname.data(), alarm_ptr->critl_reason.data());
|
||||||
|
|
||||||
|
return ( alarmUtil ( hostname, alarm_id, instance, alarm_ptr->alarm ));
|
||||||
|
}
|
||||||
|
return (FAIL_NULL_POINTER);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** Assert a specified host's alarm with a MAJOR severity level */
|
||||||
|
int alarmUtil_major ( string hostname, string alarm_id , string entity )
|
||||||
|
{
|
||||||
|
alarmUtil_type * alarm_ptr = alarmData_getAlarm_ptr(alarm_id);
|
||||||
|
if ( alarm_ptr )
|
||||||
|
{
|
||||||
|
string instance = alarm_ptr->instc_prefix ;
|
||||||
|
instance.append(entity);
|
||||||
|
|
||||||
|
alarm_ptr->alarm.severity = FM_ALARM_SEVERITY_MAJOR ;
|
||||||
|
alarm_ptr->alarm.alarm_state = FM_ALARM_STATE_SET ;
|
||||||
|
|
||||||
|
snprintf ( alarm_ptr->alarm.reason_text, FM_MAX_BUFFER_LENGTH, "%s %s", hostname.data(), alarm_ptr->major_reason.data());
|
||||||
|
|
||||||
|
return ( alarmUtil ( hostname, alarm_id, instance, alarm_ptr->alarm ));
|
||||||
|
}
|
||||||
|
return (FAIL_NULL_POINTER);
|
||||||
|
}
|
||||||
|
/** Assert a specified host's alarm with a MINOR severity level */
|
||||||
|
int alarmUtil_minor ( string hostname, string alarm_id , string entity )
|
||||||
|
{
|
||||||
|
alarmUtil_type * alarm_ptr = alarmData_getAlarm_ptr(alarm_id);
|
||||||
|
if ( alarm_ptr )
|
||||||
|
{
|
||||||
|
string instance = alarm_ptr->instc_prefix ;
|
||||||
|
instance.append(entity);
|
||||||
|
|
||||||
|
alarm_ptr->alarm.severity = FM_ALARM_SEVERITY_MINOR ;
|
||||||
|
alarm_ptr->alarm.alarm_state = FM_ALARM_STATE_SET ;
|
||||||
|
|
||||||
|
snprintf ( alarm_ptr->alarm.reason_text, FM_MAX_BUFFER_LENGTH, "%s %s", hostname.data(), alarm_ptr->minor_reason.data());
|
||||||
|
|
||||||
|
return ( alarmUtil ( hostname, alarm_id, instance, alarm_ptr->alarm ));
|
||||||
|
}
|
||||||
|
return (FAIL_NULL_POINTER);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Assert a specified host's alarm with a WARNING severity level */
|
||||||
|
int alarmUtil_warning ( string hostname, string alarm_id , string entity )
|
||||||
|
{
|
||||||
|
alarmUtil_type * alarm_ptr = alarmData_getAlarm_ptr(alarm_id);
|
||||||
|
if ( alarm_ptr )
|
||||||
|
{
|
||||||
|
string instance = alarm_ptr->instc_prefix ;
|
||||||
|
instance.append(entity);
|
||||||
|
|
||||||
|
alarm_ptr->alarm.severity = FM_ALARM_SEVERITY_WARNING ;
|
||||||
|
alarm_ptr->alarm.alarm_state = FM_ALARM_STATE_SET ;
|
||||||
|
|
||||||
|
snprintf ( alarm_ptr->alarm.reason_text, FM_MAX_BUFFER_LENGTH, "%s %s", hostname.data(), alarm_ptr->minor_reason.data());
|
||||||
|
|
||||||
|
return ( alarmUtil ( hostname, alarm_id, instance, alarm_ptr->alarm ));
|
||||||
|
}
|
||||||
|
return (FAIL_NULL_POINTER);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Create CRITICAL log */
|
||||||
|
int alarmUtil_critical_log ( string hostname, string alarm_id , string entity )
|
||||||
|
{
|
||||||
|
alarmUtil_type * alarm_ptr = alarmData_getAlarm_ptr(alarm_id);
|
||||||
|
if ( alarm_ptr )
|
||||||
|
{
|
||||||
|
string instance = alarm_ptr->instc_prefix ;
|
||||||
|
instance.append(entity);
|
||||||
|
|
||||||
|
alarm_ptr->alarm.severity = FM_ALARM_SEVERITY_CRITICAL ;
|
||||||
|
alarm_ptr->alarm.alarm_state = FM_ALARM_STATE_MSG ;
|
||||||
|
|
||||||
|
snprintf ( alarm_ptr->alarm.reason_text, FM_MAX_BUFFER_LENGTH, "%s %s", hostname.data(), alarm_ptr->critl_reason.data());
|
||||||
|
|
||||||
|
return ( alarmUtil ( hostname, alarm_id, instance, alarm_ptr->alarm ));
|
||||||
|
}
|
||||||
|
return (FAIL_NULL_POINTER);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** Create MAJOR log */
|
||||||
|
int alarmUtil_major_log ( string hostname, string alarm_id , string entity )
|
||||||
|
{
|
||||||
|
alarmUtil_type * alarm_ptr = alarmData_getAlarm_ptr(alarm_id);
|
||||||
|
if ( alarm_ptr )
|
||||||
|
{
|
||||||
|
string instance = alarm_ptr->instc_prefix ;
|
||||||
|
instance.append(entity);
|
||||||
|
|
||||||
|
alarm_ptr->alarm.severity = FM_ALARM_SEVERITY_MAJOR ;
|
||||||
|
alarm_ptr->alarm.alarm_state = FM_ALARM_STATE_MSG ;
|
||||||
|
|
||||||
|
snprintf ( alarm_ptr->alarm.reason_text, FM_MAX_BUFFER_LENGTH, "%s %s", hostname.data(), alarm_ptr->major_reason.data());
|
||||||
|
|
||||||
|
return ( alarmUtil ( hostname, alarm_id, instance, alarm_ptr->alarm ));
|
||||||
|
}
|
||||||
|
return (FAIL_NULL_POINTER);
|
||||||
|
}
|
||||||
|
/** Create MINOR log */
|
||||||
|
int alarmUtil_minor_log ( string hostname, string alarm_id , string entity )
|
||||||
|
{
|
||||||
|
alarmUtil_type * alarm_ptr = alarmData_getAlarm_ptr(alarm_id);
|
||||||
|
if ( alarm_ptr )
|
||||||
|
{
|
||||||
|
string instance = alarm_ptr->instc_prefix ;
|
||||||
|
instance.append(entity);
|
||||||
|
|
||||||
|
alarm_ptr->alarm.severity = FM_ALARM_SEVERITY_MINOR ;
|
||||||
|
alarm_ptr->alarm.alarm_state = FM_ALARM_STATE_MSG ;
|
||||||
|
|
||||||
|
snprintf ( alarm_ptr->alarm.reason_text, FM_MAX_BUFFER_LENGTH, "%s %s", hostname.data(), alarm_ptr->minor_reason.data());
|
||||||
|
|
||||||
|
return ( alarmUtil ( hostname, alarm_id, instance, alarm_ptr->alarm ));
|
||||||
|
}
|
||||||
|
return (FAIL_NULL_POINTER);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Create WARNING log */
|
||||||
|
int alarmUtil_warning_log ( string hostname, string alarm_id, string entity, string prefix )
|
||||||
|
{
|
||||||
|
alarmUtil_type * alarm_ptr = alarmData_getAlarm_ptr(alarm_id);
|
||||||
|
if ( alarm_ptr )
|
||||||
|
{
|
||||||
|
string instance = alarm_ptr->instc_prefix ;
|
||||||
|
instance.append(prefix);
|
||||||
|
|
||||||
|
alarm_ptr->alarm.severity = FM_ALARM_SEVERITY_WARNING ;
|
||||||
|
alarm_ptr->alarm.alarm_state = FM_ALARM_STATE_MSG ;
|
||||||
|
|
||||||
|
snprintf ( alarm_ptr->alarm.reason_text, FM_MAX_BUFFER_LENGTH, "%s %s", hostname.data(), entity.data());
|
||||||
|
|
||||||
|
return ( alarmUtil ( hostname, alarm_id, instance, alarm_ptr->alarm ));
|
||||||
|
}
|
||||||
|
return (FAIL_NULL_POINTER);
|
||||||
|
}
|
108
mtce-common/cgts-mtce-common-1.0/alarm/scripts/mtcalarm.init
Normal file
108
mtce-common/cgts-mtce-common-1.0/alarm/scripts/mtcalarm.init
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
#
|
||||||
|
# Copyright (c) 2013-2014 Wind River Systems, Inc.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# chkconfig: 2345 95 95
|
||||||
|
#
|
||||||
|
### BEGIN INIT INFO
|
||||||
|
# Provides: mtcalarm
|
||||||
|
# Default-Start: 3 5
|
||||||
|
# Default-Stop: 0 1 2 6
|
||||||
|
# Short-Description: Maintenance Alarm Daemon
|
||||||
|
### END INIT INFO
|
||||||
|
|
||||||
|
. /etc/init.d/functions
|
||||||
|
|
||||||
|
DAEMON_NAME="mtcalarmd"
|
||||||
|
DAEMON="/usr/local/bin/${DAEMON_NAME}"
|
||||||
|
PIDFILE="/var/run/${DAEMON_NAME}.pid"
|
||||||
|
PLATFORM_CONF="/etc/platform/platform.conf"
|
||||||
|
|
||||||
|
IFACE=""
|
||||||
|
|
||||||
|
# Linux Standard Base (LSB) Error Codes
|
||||||
|
RETVAL=0
|
||||||
|
GENERIC_ERROR=1
|
||||||
|
INVALID_ARGS=2
|
||||||
|
UNSUPPORTED_FEATURE=3
|
||||||
|
NOT_INSTALLED=5
|
||||||
|
NOT_RUNNING=7
|
||||||
|
|
||||||
|
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
|
||||||
|
export PATH
|
||||||
|
|
||||||
|
if [ ! -e "${DAEMON}" ] ; then
|
||||||
|
logger "${DAEMON} is missing"
|
||||||
|
exit ${NOT_INSTALLED}
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
start)
|
||||||
|
logger "Starting ${DAEMON_NAME}"
|
||||||
|
echo -n "Starting ${DAEMON_NAME}: "
|
||||||
|
if [ -n "`pidof ${DAEMON_NAME}`" ] ; then
|
||||||
|
echo -n "is already running "
|
||||||
|
RETVAL=0
|
||||||
|
else
|
||||||
|
start-stop-daemon --start -b -x ${DAEMON} -- -l
|
||||||
|
RETVAL=$?
|
||||||
|
fi
|
||||||
|
if [ ${RETVAL} -eq 0 ] ; then
|
||||||
|
pid=`pidof ${DAEMON_NAME}`
|
||||||
|
echo "OK"
|
||||||
|
logger "${DAEMON} (${pid})"
|
||||||
|
else
|
||||||
|
echo "FAIL"
|
||||||
|
RETVAL=${GENERIC_ERROR}
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
stop)
|
||||||
|
logger "Stopping ${DAEMON_NAME}"
|
||||||
|
echo -n "Stopping ${DAEMON_NAME}: "
|
||||||
|
if [ -n "`pidof ${DAEMON_NAME}`" ] ; then
|
||||||
|
killproc ${DAEMON_NAME}
|
||||||
|
fi
|
||||||
|
if [ -n "`pidof ${DAEMON_NAME}`" ] ; then
|
||||||
|
echo "FAIL"
|
||||||
|
RETVAL=${NOT_RUNNING}
|
||||||
|
else
|
||||||
|
echo "OK"
|
||||||
|
fi
|
||||||
|
rm -f ${PIDFILE}
|
||||||
|
;;
|
||||||
|
|
||||||
|
restart)
|
||||||
|
$0 stop
|
||||||
|
$0 start
|
||||||
|
;;
|
||||||
|
|
||||||
|
status)
|
||||||
|
pid=`pidof ${DAEMON_NAME}`
|
||||||
|
RETVAL=$?
|
||||||
|
if [ ${RETVAL} -eq 0 ] ; then
|
||||||
|
echo "${DAEMON_NAME} is running"
|
||||||
|
else
|
||||||
|
echo "${DAEMON_NAME} is NOT running"
|
||||||
|
RETVAL=${NOT_RUNNING}
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
reload)
|
||||||
|
pkill -hup ${DAEMON_NAME}
|
||||||
|
;;
|
||||||
|
|
||||||
|
condrestart)
|
||||||
|
$0 restart
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo "usage: $0 { start | stop | status | restart | condrestart | reload | status }"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
exit ${RETVAL}
|
@ -0,0 +1,17 @@
|
|||||||
|
#daily
|
||||||
|
nodateext
|
||||||
|
start 1
|
||||||
|
compress
|
||||||
|
copytruncate
|
||||||
|
notifempty
|
||||||
|
missingok
|
||||||
|
|
||||||
|
/var/log/mtcalarmd.log
|
||||||
|
{
|
||||||
|
size 10M
|
||||||
|
rotate 20
|
||||||
|
sharedscripts
|
||||||
|
postrotate
|
||||||
|
systemctl reload syslog-ng > /dev/null 2>&1 || true
|
||||||
|
endscript
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
[process]
|
||||||
|
process = mtcalarmd
|
||||||
|
service = mtcalarm
|
||||||
|
pidfile = /var/run/mtcalarmd.pid
|
||||||
|
script = /etc/init.d/mtcalarmd
|
||||||
|
style = lsb ; ocf or lsb
|
||||||
|
severity = major ; minor, major, critical
|
||||||
|
restarts = 3 ; restart retries before error assertion
|
||||||
|
interval = 1 ; number of seconds to wait between restarts
|
||||||
|
debounce = 3 ; number of seconds that a process needs to remain
|
||||||
|
; running before degrade is removed and retry count
|
||||||
|
; is cleared.
|
||||||
|
startuptime = 1 ; Seconds to wait after process start before starting the debounce monitor
|
||||||
|
mode = passive ; Monitoring mode: passive (default) or active
|
||||||
|
; passive: process death monitoring (default: always)
|
||||||
|
; active : heartbeat monitoring, i.e. request / response messaging
|
||||||
|
; ignore : do not monitor or stop monitoring
|
@ -0,0 +1,14 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Titanium Cloud Maintenance Alarm Handler Client
|
||||||
|
After=network.target syslog.service config.service
|
||||||
|
Before=pmon.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=forking
|
||||||
|
ExecStart=/etc/rc.d/init.d/mtcalarm start
|
||||||
|
ExecStop=/etc/rc.d/init.d/mtcalarm stop
|
||||||
|
ExecReload=/etc/rc.d/init.d/mtcalarm reload
|
||||||
|
PIDFile=/var/run/mtcalarmd.pid
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
91
mtce-common/cgts-mtce-common-1.0/common/Makefile
Executable file
91
mtce-common/cgts-mtce-common-1.0/common/Makefile
Executable file
@ -0,0 +1,91 @@
|
|||||||
|
#
|
||||||
|
# Copyright (c) 2013-2016 Wind River Systems, Inc.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
|
SRCS = regexUtil.cpp \
|
||||||
|
timeUtil.cpp \
|
||||||
|
ipmiUtil.cpp \
|
||||||
|
pingUtil.cpp \
|
||||||
|
keyClass.cpp \
|
||||||
|
hostClass.cpp \
|
||||||
|
nodeClass.cpp \
|
||||||
|
nodeBase.cpp \
|
||||||
|
nodeTimers.cpp \
|
||||||
|
nodeUtil.cpp \
|
||||||
|
hostUtil.cpp \
|
||||||
|
nodeEvent.cpp \
|
||||||
|
alarmUtil.cpp \
|
||||||
|
nlEvent.cpp \
|
||||||
|
jsonUtil.cpp \
|
||||||
|
httpUtil.cpp \
|
||||||
|
tokenUtil.cpp \
|
||||||
|
msgClass.cpp
|
||||||
|
|
||||||
|
COMMON_OBJS = regexUtil.o \
|
||||||
|
timeUtil.o \
|
||||||
|
pingUtil.o \
|
||||||
|
keyClass.o \
|
||||||
|
keyClass.cpp \
|
||||||
|
hostClass.o \
|
||||||
|
nodeClass.o \
|
||||||
|
nodeBase.o \
|
||||||
|
nodeTimers.o \
|
||||||
|
nodeUtil.o \
|
||||||
|
hostUtil.o \
|
||||||
|
nodeEvent.o \
|
||||||
|
alarmUtil.o \
|
||||||
|
nlEvent.o \
|
||||||
|
jsonUtil.o \
|
||||||
|
httpUtil.o \
|
||||||
|
tokenUtil.o \
|
||||||
|
msgClass.o
|
||||||
|
|
||||||
|
OBJS = $(SRCS:.cpp=.o)
|
||||||
|
LDLIBS += -lstdc++ -ldaemon -lcommon -lfmcommon -lrt -lpq -levent -ljson-c -lcrypto -luuid
|
||||||
|
|
||||||
|
INCLUDES = -I../daemon -I../alarm -I../maintenance -I../heartbeat -I.. -I.
|
||||||
|
CCFLAGS = -g -O2 -Wall -Wextra -Werror -std=c++11
|
||||||
|
|
||||||
|
STATIC_ANALYSIS_TOOL = cppcheck
|
||||||
|
STATIC_ANALYSIS_TOOL_EXISTS = $(shell [[ -e `which $(STATIC_ANALYSIS_TOOL)` ]] && echo 1 || echo 0)
|
||||||
|
|
||||||
|
ifeq (,$(shell which ${CC}))
|
||||||
|
CC=g++
|
||||||
|
endif
|
||||||
|
|
||||||
|
.cpp.o:
|
||||||
|
$(CXX) $(CCFLAGS) $(INCLUDES) $(EXTRACCFLAGS) -c $< -o $@
|
||||||
|
|
||||||
|
static_analysis:
|
||||||
|
ifeq ($(STATIC_ANALYSIS_TOOL_EXISTS), 1)
|
||||||
|
$(STATIC_ANALYSIS_TOOL) --language=c++ --enable=warning -U__AREA__ -UWANT_FIT_TESTING *.cpp *.h
|
||||||
|
else
|
||||||
|
echo "Warning: '$(STATIC_ANALYSIS_TOOL)' static analysis tool not installed ; bypassing ..."
|
||||||
|
endif
|
||||||
|
|
||||||
|
lib: clean threadUtil static_analysis $(OBJS) library
|
||||||
|
|
||||||
|
build: threadUtil static_analysis $(OBJS) library
|
||||||
|
|
||||||
|
threadUtil:
|
||||||
|
$(CXX) -c threadUtil.cpp $(CCFLAGS) $(INCLUDES) $(EXTRACCFLAGS) $(LDLIBS) -lpthread -o threadUtil.o
|
||||||
|
ar rcs libthreadUtil.a threadUtil.o $(EXTRAARFLAGS)
|
||||||
|
|
||||||
|
library:
|
||||||
|
ar rcs libcommon.a $(COMMON_OBJS) $(EXTRAARFLAGS)
|
||||||
|
ar rcs libipmiUtil.a ipmiUtil.o $(EXTRAARFLAGS)
|
||||||
|
ar rcs libpingUtil.a pingUtil.o $(EXTRAARFLAGS)
|
||||||
|
ar rcs libnodeBase.a nodeBase.o $(EXTRAARFLAGS)
|
||||||
|
ar rcs libregexUtil.a regexUtil.o $(EXTRAARFLAGS)
|
||||||
|
ar rcs libhostUtil.a hostUtil.o $(EXTRAARFLAGS)
|
||||||
|
|
||||||
|
testhead:
|
||||||
|
$(CCFLAGS) $(INCLUDES) -L../daemon -L../common -L. $(LDLIBS) -lpingUtil -lnodeBase -lregexUtil -lhostUtil
|
||||||
|
|
||||||
|
fsync: fsync.o
|
||||||
|
$(CC) fsync.o -L../daemon -L../common -L. -ldaemon -lcommon -o fsync
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@rm -f *.o *.a fsync *.o
|
422
mtce-common/cgts-mtce-common-1.0/common/alarmUtil.cpp
Normal file
422
mtce-common/cgts-mtce-common-1.0/common/alarmUtil.cpp
Normal file
@ -0,0 +1,422 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2013, 2016 Wind River Systems, Inc.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Wind River CGCS Platform common Alarm utilities
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "daemon_common.h" /* for ... daemon_is_file_present */
|
||||||
|
|
||||||
|
#include "nodeBase.h"
|
||||||
|
#include "nodeUtil.h" /* for ... get_mtclogd_sockPtr */
|
||||||
|
#include "alarmUtil.h" /* for ... alarmUtilClass and Utilities */
|
||||||
|
|
||||||
|
|
||||||
|
alarmUtilClass __alarmObject ;
|
||||||
|
|
||||||
|
/* module init */
|
||||||
|
void alarmUtil_init ( void )
|
||||||
|
{
|
||||||
|
snprintf ( &__alarmObject.varlog_filename[0], MAX_FILENAME_LEN, "/var/log/%s_alarm.log",
|
||||||
|
program_invocation_short_name );
|
||||||
|
}
|
||||||
|
|
||||||
|
/********************** alarmUtilClass API Implementation ************************/
|
||||||
|
|
||||||
|
alarmUtilClass::alarmUtilClass()
|
||||||
|
{
|
||||||
|
temp_str[0] = '\0';
|
||||||
|
varlog_filename[0] = '\0';
|
||||||
|
//ilog ("class constructor\n");
|
||||||
|
alarmUtil_init ();
|
||||||
|
}
|
||||||
|
|
||||||
|
alarmUtilClass::~alarmUtilClass()
|
||||||
|
{
|
||||||
|
// ilog ("class destructor\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
/***************************** Open API Implementation ***************************/
|
||||||
|
|
||||||
|
string alarmUtil_getSev_str ( EFmAlarmSeverityT sev )
|
||||||
|
{
|
||||||
|
switch ( sev )
|
||||||
|
{
|
||||||
|
case FM_ALARM_SEVERITY_CLEAR: return ("clear");
|
||||||
|
case FM_ALARM_SEVERITY_WARNING: return ("warning");
|
||||||
|
case FM_ALARM_SEVERITY_MINOR: return ("minor");
|
||||||
|
case FM_ALARM_SEVERITY_MAJOR: return ("major");
|
||||||
|
case FM_ALARM_SEVERITY_CRITICAL:return ("critical");
|
||||||
|
default : return ("unknown");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
EFmAlarmSeverityT alarmUtil_getSev_enum ( string sev )
|
||||||
|
{
|
||||||
|
if ( !sev.compare("clear")) return (FM_ALARM_SEVERITY_CLEAR) ;
|
||||||
|
if ( !sev.compare("warning")) return (FM_ALARM_SEVERITY_WARNING);
|
||||||
|
if ( !sev.compare("minor")) return (FM_ALARM_SEVERITY_MINOR);
|
||||||
|
if ( !sev.compare("major")) return (FM_ALARM_SEVERITY_MAJOR);
|
||||||
|
if ( !sev.compare("critical")) return (FM_ALARM_SEVERITY_CRITICAL);
|
||||||
|
wlog ("Unsupported severity '%s'\n", sev.c_str() );
|
||||||
|
return (FM_ALARM_SEVERITY_CLEAR) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* update the passed in alarm struct's instance_id entity path for the specified host */
|
||||||
|
void _build_entity_path ( string & hostname, string & instance, SFmAlarmDataT & alarm )
|
||||||
|
{
|
||||||
|
snprintf ( &alarm.entity_type_id[0], FM_MAX_BUFFER_LENGTH, "system.host" );
|
||||||
|
|
||||||
|
if ( instance.empty() )
|
||||||
|
{
|
||||||
|
snprintf ( &alarm.entity_instance_id[0], FM_MAX_BUFFER_LENGTH, "%s%s",
|
||||||
|
ENTITY_PREFIX, hostname.data());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
snprintf ( &alarm.entity_instance_id[0], FM_MAX_BUFFER_LENGTH, "%s%s.%s",
|
||||||
|
ENTITY_PREFIX, hostname.data(), instance.data());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void alarmUtil_clear_all ( string hostname )
|
||||||
|
{
|
||||||
|
SFmAlarmDataT alarm ;
|
||||||
|
string instance = "" ;
|
||||||
|
|
||||||
|
_build_entity_path ( hostname, instance, alarm );
|
||||||
|
|
||||||
|
/* This will clear all the alarms for this host ;
|
||||||
|
* even ones that are raised against this host by other daemons */
|
||||||
|
fm_clear_all_async ( &alarm.entity_instance_id );
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Name : alarmUtil_query
|
||||||
|
*
|
||||||
|
* Description: Utility will query a specific alarm for its current severity
|
||||||
|
*
|
||||||
|
* @param : identity may be 200.xxx
|
||||||
|
*
|
||||||
|
* @param : instance may be
|
||||||
|
*
|
||||||
|
* host=<hostname>
|
||||||
|
*
|
||||||
|
* example:
|
||||||
|
*
|
||||||
|
* hostname=compute-1
|
||||||
|
*
|
||||||
|
* host=<hostname>.<function>=<specific>
|
||||||
|
*
|
||||||
|
* example:
|
||||||
|
*
|
||||||
|
* hostname=compute-1.process=mtcClient
|
||||||
|
*
|
||||||
|
* hostname=compute-1.sensor=Fan_PSU2
|
||||||
|
*
|
||||||
|
* Updates : None
|
||||||
|
*
|
||||||
|
* Returns : FM severity code for the specified alarm.
|
||||||
|
* FM_ALARM_SEVERITY_CLEAR if it not set.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
EFmAlarmSeverityT alarmUtil_query ( string & hostname,
|
||||||
|
string & identity,
|
||||||
|
string & instance )
|
||||||
|
{
|
||||||
|
SFmAlarmDataT alarm_query ;
|
||||||
|
AlarmFilter alarm_filter ;
|
||||||
|
EFmErrorT rc ;
|
||||||
|
|
||||||
|
memset(&alarm_query, 0, sizeof(alarm_query));
|
||||||
|
memset(&alarm_filter, 0, sizeof(alarm_filter));
|
||||||
|
|
||||||
|
snprintf ( &alarm_filter.alarm_id[0], FM_MAX_BUFFER_LENGTH, "%s", identity.data());
|
||||||
|
|
||||||
|
if ( instance.empty() )
|
||||||
|
{
|
||||||
|
snprintf ( &alarm_filter.entity_instance_id[0], FM_MAX_BUFFER_LENGTH, "%s%s",
|
||||||
|
ENTITY_PREFIX, hostname.data());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
snprintf ( &alarm_filter.entity_instance_id[0], FM_MAX_BUFFER_LENGTH, "%s%s.%s",
|
||||||
|
ENTITY_PREFIX, hostname.data(), instance.data());
|
||||||
|
}
|
||||||
|
|
||||||
|
alog ("entity_instance:%s\n", alarm_filter.entity_instance_id );
|
||||||
|
if (( rc = fm_get_fault ( &alarm_filter, &alarm_query )) == FM_ERR_OK )
|
||||||
|
{
|
||||||
|
dlog ("Found with Severity: %d\n", alarm_query.severity );
|
||||||
|
return (alarm_query.severity) ;
|
||||||
|
}
|
||||||
|
else if ( rc != FM_ERR_ENTITY_NOT_FOUND )
|
||||||
|
{
|
||||||
|
elog ("%s fm_get_fault returned error (%d)\n", hostname.c_str(), rc );
|
||||||
|
}
|
||||||
|
return (FM_ALARM_SEVERITY_CLEAR);
|
||||||
|
}
|
||||||
|
|
||||||
|
int alarmUtil_query_identity ( string identity, SFmAlarmDataT * alarm_list_ptr, unsigned int max_alarms )
|
||||||
|
{
|
||||||
|
int rc = 0 ;
|
||||||
|
|
||||||
|
if ( max_alarms == 0 )
|
||||||
|
{
|
||||||
|
slog ("max alarms is zero !\n");
|
||||||
|
}
|
||||||
|
else if ( identity.empty() )
|
||||||
|
{
|
||||||
|
slog ("empty alarm 'identity'\n");
|
||||||
|
}
|
||||||
|
else if ( alarm_list_ptr )
|
||||||
|
{
|
||||||
|
AlarmFilter alarm_filter ;
|
||||||
|
|
||||||
|
memset(&alarm_filter, 0, sizeof(alarm_filter));
|
||||||
|
snprintf ( alarm_filter.alarm_id, FM_MAX_BUFFER_LENGTH, "%s", identity.data());
|
||||||
|
rc = fm_get_faults_by_id ( &alarm_filter.alarm_id, alarm_list_ptr, &max_alarms );
|
||||||
|
alog ("%s fm_get_faults_by_id rc = %d\n", alarm_filter.alarm_id, rc );
|
||||||
|
if ( rc == FM_ERR_OK )
|
||||||
|
{
|
||||||
|
return (PASS);
|
||||||
|
}
|
||||||
|
else if ( rc == FM_ERR_ENTITY_NOT_FOUND )
|
||||||
|
{
|
||||||
|
return (RETRY);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return (FAIL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
slog ("caller supplied null alarm_list_ptr\n");
|
||||||
|
}
|
||||||
|
return (FAIL_NULL_POINTER);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*********************************************************************************
|
||||||
|
*
|
||||||
|
* Name : alarmUtil
|
||||||
|
*
|
||||||
|
* Purpose : Primary module API used to set/clear severity alarms and logs in FM.
|
||||||
|
*
|
||||||
|
* Description : Other maintenance services are expected to use ths interface to
|
||||||
|
*
|
||||||
|
*
|
||||||
|
********************************************************************************/
|
||||||
|
int alarmUtil ( string & hostname,
|
||||||
|
string & identity,
|
||||||
|
string & instance,
|
||||||
|
SFmAlarmDataT & alarm )
|
||||||
|
{
|
||||||
|
int rc = PASS ;
|
||||||
|
|
||||||
|
// msgSock_type * mtclogd_ptr = get_mtclogd_sockPtr() ;
|
||||||
|
|
||||||
|
/* Don't report events while we are in reset mode */
|
||||||
|
if ( daemon_is_file_present ( NODE_RESET_FILE ) )
|
||||||
|
{
|
||||||
|
return (rc);
|
||||||
|
}
|
||||||
|
|
||||||
|
_build_entity_path ( hostname, instance, alarm );
|
||||||
|
|
||||||
|
#ifdef WANT_ALARM_QUERY
|
||||||
|
|
||||||
|
/* See if the alarm is already in the requested state */
|
||||||
|
EFmAlarmSeverityT curr_sev = alarmUtil_query ( hostname, identity, instance ) ;
|
||||||
|
|
||||||
|
/* If its not a log message and we are already at this
|
||||||
|
* severity level then ignore the call */
|
||||||
|
if (( alarm.alarm_state != FM_ALARM_STATE_MSG ) &&
|
||||||
|
( curr_sev == alarm.severity ))
|
||||||
|
{
|
||||||
|
alog ("%s %s %s already at desired (%s) severity level\n",
|
||||||
|
hostname.c_str(),
|
||||||
|
identity.c_str(),
|
||||||
|
instance.c_str(),
|
||||||
|
alarmUtil_getSev_str(alarm.severity).c_str());
|
||||||
|
return (rc);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
snprintf(&alarm.alarm_id[0], FM_MAX_BUFFER_LENGTH, "%s", identity.data());
|
||||||
|
|
||||||
|
if (( alarm.alarm_state == FM_ALARM_STATE_SET ) ||
|
||||||
|
( alarm.alarm_state == FM_ALARM_STATE_MSG ))
|
||||||
|
{
|
||||||
|
if ( alarm.alarm_state == FM_ALARM_STATE_SET )
|
||||||
|
{
|
||||||
|
alog ("%s setting %s %s alarm\n", hostname.c_str(), alarm.alarm_id, alarm.entity_instance_id );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
alog ("%s creating %s %s log\n", hostname.c_str(), alarm.alarm_id, alarm.entity_instance_id );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Debug Logs */
|
||||||
|
alog ("%s Alarm Reason: %s\n", hostname.c_str(), alarm.reason_text );
|
||||||
|
alog ("%s Alarm Action: %s\n", hostname.c_str(), alarm.proposed_repair_action );
|
||||||
|
alog ("%s Alarm Ident : %s : %s\n", hostname.c_str(), alarm.entity_type_id, alarm.entity_instance_id );
|
||||||
|
alog ("%s Alarm State : state:%d sev:%d type:%d cause:%d sa:%c supp:%c\n",
|
||||||
|
hostname.c_str(),
|
||||||
|
alarm.alarm_state,
|
||||||
|
alarm.severity,
|
||||||
|
alarm.alarm_type,
|
||||||
|
alarm.probable_cause,
|
||||||
|
alarm.service_affecting ? 'Y' : 'N',
|
||||||
|
alarm.suppression ? 'Y' : 'N' );
|
||||||
|
|
||||||
|
snprintf (&__alarmObject.temp_str[0], MAX_API_LOG_LEN-1,
|
||||||
|
"\n%s [%5d] fm_set_fault: %s %s state:%d sev:%d type:%d cause:%d sa:%c supp:%c",
|
||||||
|
pt(), getpid(), hostname.c_str(), alarm.alarm_id, alarm.alarm_state,
|
||||||
|
alarm.severity,
|
||||||
|
alarm.alarm_type,
|
||||||
|
alarm.probable_cause,
|
||||||
|
alarm.service_affecting ? 'Y' : 'N',
|
||||||
|
alarm.suppression ? 'Y' : 'N' );
|
||||||
|
|
||||||
|
//send_log_message ( mtclogd_ptr, hostname.data(), &__alarmObject.varlog_filename[0],
|
||||||
|
// &__alarmObject.temp_str[0] );
|
||||||
|
|
||||||
|
nodeUtil_latency_log ( hostname, NODEUTIL_LATENCY_MON_START , 0 );
|
||||||
|
rc = fm_set_fault_async ( &alarm , NULL );
|
||||||
|
nodeUtil_latency_log ( hostname, "fm_set_fault - alarm - common" , LATENCY_1SEC );
|
||||||
|
|
||||||
|
snprintf (&__alarmObject.temp_str[0], MAX_API_LOG_LEN-1,
|
||||||
|
"%s [%5d] fm_set_fault: %s returned %d",
|
||||||
|
pt(), getpid(), hostname.c_str(), rc );
|
||||||
|
|
||||||
|
//send_log_message ( mtclogd_ptr, hostname.data(), &__alarmObject.varlog_filename[0],
|
||||||
|
// &__alarmObject.temp_str[0] );
|
||||||
|
|
||||||
|
if ( rc != FM_ERR_OK )
|
||||||
|
{
|
||||||
|
elog ("%s failed to set alarm %s (rc:%d)\n", hostname.c_str(), alarm.alarm_id, rc);
|
||||||
|
rc = FAIL ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // ( alarm.alarm_state == FM_ALARM_STATE_CLEAR )
|
||||||
|
{
|
||||||
|
AlarmFilter filter ; memset(&filter, 0, sizeof(filter));
|
||||||
|
|
||||||
|
/* Setup the alarm filter */
|
||||||
|
snprintf(filter.alarm_id, FM_MAX_BUFFER_LENGTH, "%s", alarm.alarm_id);
|
||||||
|
snprintf(filter.entity_instance_id, FM_MAX_BUFFER_LENGTH, "%s", alarm.entity_instance_id);
|
||||||
|
|
||||||
|
snprintf (&__alarmObject.temp_str[0], MAX_API_LOG_LEN-1, "\n%s [%5d] fm_clear_fault: %s %s:%s",
|
||||||
|
pt(), getpid(), hostname.c_str(), alarm.entity_instance_id, alarm.alarm_id );
|
||||||
|
|
||||||
|
// send_log_message ( mtclogd_ptr, hostname.data(), &__alarmObject.varlog_filename[0],
|
||||||
|
// &__alarmObject.temp_str[0] );
|
||||||
|
|
||||||
|
alog ("%s clearing %s %s alarm\n", hostname.c_str(), alarm.alarm_id, alarm.entity_instance_id);
|
||||||
|
nodeUtil_latency_log ( hostname, NODEUTIL_LATENCY_MON_START , 0 );
|
||||||
|
if ( ( rc = fm_clear_fault_async ( &filter )) != FM_ERR_OK )
|
||||||
|
{
|
||||||
|
if ( rc != FM_ERR_ENTITY_NOT_FOUND )
|
||||||
|
{
|
||||||
|
elog ("%s failed to fm_clear_fault (rc:%d)\n", hostname.c_str(), rc );
|
||||||
|
rc = FAIL ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
nodeUtil_latency_log ( hostname, "fm_clear_fault - common" , LATENCY_1SEC );
|
||||||
|
}
|
||||||
|
|
||||||
|
return (rc);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Clear the specified hosts's alarm */
|
||||||
|
int alarmUtil_clear ( string hostname, string identity, string instance, SFmAlarmDataT & alarm )
|
||||||
|
{
|
||||||
|
alarm.severity = FM_ALARM_SEVERITY_CLEAR ;
|
||||||
|
alarm.alarm_state = FM_ALARM_STATE_CLEAR ;
|
||||||
|
return ( alarmUtil ( hostname, identity, instance, alarm ));
|
||||||
|
}
|
||||||
|
|
||||||
|
/************************* A L A R M I N G **************************/
|
||||||
|
|
||||||
|
/** Assert a specified hosts's alarm with a CRITICAL severity level */
|
||||||
|
int alarmUtil_critical ( string hostname, string identity, string instance, SFmAlarmDataT & alarm )
|
||||||
|
{
|
||||||
|
alarm.severity = FM_ALARM_SEVERITY_CRITICAL ;
|
||||||
|
alarm.alarm_state = FM_ALARM_STATE_SET ;
|
||||||
|
return ( alarmUtil ( hostname, identity, instance, alarm ));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Assert a specified host's alarm with a MAJOR severity level */
|
||||||
|
int alarmUtil_major ( string hostname, string identity, string instance, SFmAlarmDataT & alarm )
|
||||||
|
{
|
||||||
|
alarm.severity = FM_ALARM_SEVERITY_MAJOR ;
|
||||||
|
alarm.alarm_state = FM_ALARM_STATE_SET ;
|
||||||
|
return ( alarmUtil ( hostname, identity, instance, alarm ));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Assert a specified host's alarm with a MINOR severity level */
|
||||||
|
int alarmUtil_minor ( string hostname, string identity, string instance, SFmAlarmDataT & alarm )
|
||||||
|
{
|
||||||
|
alarm.severity = FM_ALARM_SEVERITY_MINOR ;
|
||||||
|
alarm.alarm_state = FM_ALARM_STATE_SET ;
|
||||||
|
return ( alarmUtil ( hostname, identity, instance, alarm ));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Assert a specified host's mtce alarm with a WARNING severity level */
|
||||||
|
int alarmUtil_warning ( string hostname, string identity, string instance, SFmAlarmDataT & alarm )
|
||||||
|
{
|
||||||
|
alarm.severity = FM_ALARM_SEVERITY_WARNING ;
|
||||||
|
alarm.alarm_state = FM_ALARM_STATE_SET ;
|
||||||
|
return ( alarmUtil ( hostname, identity, instance, alarm ));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************** L O G G I N G **********************************/
|
||||||
|
|
||||||
|
/** Create a CRITICAL log */
|
||||||
|
int alarmUtil_critical_log ( string hostname, string identity, string instance, SFmAlarmDataT & alarm )
|
||||||
|
{
|
||||||
|
alarm.severity = FM_ALARM_SEVERITY_CRITICAL ;
|
||||||
|
alarm.alarm_state = FM_ALARM_STATE_MSG ;
|
||||||
|
return ( alarmUtil ( hostname,identity, instance, alarm ));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Create a MAJOR log */
|
||||||
|
int alarmUtil_major_log ( string hostname, string identity, string instance, SFmAlarmDataT & alarm )
|
||||||
|
{
|
||||||
|
alarm.severity = FM_ALARM_SEVERITY_MAJOR ;
|
||||||
|
alarm.alarm_state = FM_ALARM_STATE_MSG ;
|
||||||
|
return ( alarmUtil ( hostname, identity, instance, alarm ));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Create a MINOR log */
|
||||||
|
int alarmUtil_minor_log ( string hostname, string identity, string instance, SFmAlarmDataT & alarm )
|
||||||
|
{
|
||||||
|
alarm.severity = FM_ALARM_SEVERITY_MINOR ;
|
||||||
|
alarm.alarm_state = FM_ALARM_STATE_MSG ;
|
||||||
|
return ( alarmUtil ( hostname, identity, instance, alarm ));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Create a WARNING log */
|
||||||
|
int alarmUtil_warning_log ( string hostname, string identity, string instance, SFmAlarmDataT & alarm )
|
||||||
|
{
|
||||||
|
alarm.severity = FM_ALARM_SEVERITY_WARNING ;
|
||||||
|
alarm.alarm_state = FM_ALARM_STATE_MSG ;
|
||||||
|
return ( alarmUtil ( hostname, identity, instance, alarm ));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Create a neutral log */
|
||||||
|
int alarmUtil_log ( string hostname, string identity, string instance, SFmAlarmDataT & alarm )
|
||||||
|
{
|
||||||
|
alarm.alarm_state = FM_ALARM_STATE_MSG ;
|
||||||
|
return ( alarmUtil ( hostname, identity, instance, alarm ));
|
||||||
|
}
|
142
mtce-common/cgts-mtce-common-1.0/common/alarmUtil.h
Normal file
142
mtce-common/cgts-mtce-common-1.0/common/alarmUtil.h
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
#ifndef __ALARMUTIL_H__
|
||||||
|
#define __ALARMUTIL_H__
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2013, 2016 Wind River Systems, Inc.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Wind River CGTS Platform Common Maintenance 'Alarm' Header
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
//using namespace std;
|
||||||
|
|
||||||
|
/* external header APIs */
|
||||||
|
#include "nodeBase.h"
|
||||||
|
#include "fmAPI.h" /* for fm_set_fault, fm_clear_fault, etc */
|
||||||
|
|
||||||
|
#define ENTITY_PREFIX ((const char *)"host=")
|
||||||
|
|
||||||
|
#define MAX_ALARMS (10)
|
||||||
|
|
||||||
|
#define SWERR_ALARM_ID ((const char *)"200.000") /* Do No Use */
|
||||||
|
#define LOCK_ALARM_ID ((const char *)"200.001")
|
||||||
|
#define ENABLE_ALARM_ID ((const char *)"200.004")
|
||||||
|
#define MGMNT_HB_ALARM_ID ((const char *)"200.005")
|
||||||
|
#define PMOND_ALARM_ID ((const char *)"200.006")
|
||||||
|
#define SENSOR_ALARM_ID ((const char *)"200.007") /* Sensor read alarm ; i.e. the sensor read value bad */
|
||||||
|
#define INFRA_HB_ALARM_ID ((const char *)"200.009")
|
||||||
|
#define BM_ALARM_ID ((const char *)"200.010")
|
||||||
|
#define CONFIG_ALARM_ID ((const char *)"200.011")
|
||||||
|
#define CH_CONT_ALARM_ID ((const char *)"200.012") /* Combo Host Controller Failure - with Active Compute */
|
||||||
|
#define CH_COMP_ALARM_ID ((const char *)"200.013") /* Combo Host Compute Failure - on last Controller */
|
||||||
|
#define SENSORCFG_ALARM_ID ((const char *)"200.014") /* Sensor configuration alarm ; i.e. could not add */
|
||||||
|
#define SENSORGROUP_ALARM_ID ((const char *)"200.015") /* Sensor Group Read Error */
|
||||||
|
|
||||||
|
#define EVENT_LOG_ID ((const char *)"200.020")
|
||||||
|
#define COMMAND_LOG_ID ((const char *)"200.021")
|
||||||
|
#define STATECHANGE_LOG_ID ((const char *)"200.022")
|
||||||
|
#define SERVICESTATUS_LOG_ID ((const char *)"200.023") /* log used to report service failure events against */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: This class is more of a place holder for
|
||||||
|
* more centralized management of alarms
|
||||||
|
* It is useless in its present form.
|
||||||
|
**/
|
||||||
|
class alarmUtilClass
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
alarmUtilClass();
|
||||||
|
~alarmUtilClass();
|
||||||
|
|
||||||
|
char temp_str [MAX_API_LOG_LEN] ;
|
||||||
|
char varlog_filename[MAX_FILENAME_LEN];
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
SFmAlarmDataT alarm ;
|
||||||
|
string name ;
|
||||||
|
string instc_prefix ; /* Instance prefix i.e. "=sensor." or "=process." */
|
||||||
|
string critl_reason ;
|
||||||
|
string minor_reason ;
|
||||||
|
string major_reason ;
|
||||||
|
string clear_reason ;
|
||||||
|
} alarmUtil_type ;
|
||||||
|
|
||||||
|
/** Converts FM severity to representative string */
|
||||||
|
string alarmUtil_getSev_str ( EFmAlarmSeverityT sev );
|
||||||
|
EFmAlarmSeverityT alarmUtil_getSev_enum ( string sev );
|
||||||
|
|
||||||
|
/* Clear all alarms against this host */
|
||||||
|
void alarmUtil_clear_all ( string hostname );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Query the specified alarm severity level.
|
||||||
|
* Severity levels are specified in fmAPI.h
|
||||||
|
**/
|
||||||
|
EFmAlarmSeverityT alarmUtil_query ( string & hostname,
|
||||||
|
string & identity,
|
||||||
|
string & instance );
|
||||||
|
|
||||||
|
int alarmUtil_query_identity ( string identity,
|
||||||
|
SFmAlarmDataT * alarm_list_ptr,
|
||||||
|
unsigned int alarms_max );
|
||||||
|
|
||||||
|
int alarmUtil_clear ( string hostname, string identity, string instance, SFmAlarmDataT & alarm );
|
||||||
|
|
||||||
|
/************************* A L A R M I N G **************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Assert a unique identity alarm or log against specified
|
||||||
|
* hostname/instance using the supplied alarm data
|
||||||
|
**/
|
||||||
|
int alarmUtil (string & hostname, string & identity, string & instance, SFmAlarmDataT & alarm);
|
||||||
|
|
||||||
|
/** Return a string that represents the specified severity enum */
|
||||||
|
string alarmUtil_getSev_str ( EFmAlarmSeverityT sev );
|
||||||
|
|
||||||
|
/** Assert a specified host's alarm with a CRITICAL severity level */
|
||||||
|
int alarmUtil_critical ( string hostname, string identity, string instance, SFmAlarmDataT & alarm );
|
||||||
|
|
||||||
|
/** Assert a specified host's alarm with a MAJOR severity level */
|
||||||
|
int alarmUtil_major ( string hostname, string identity, string instance, SFmAlarmDataT & alarm );
|
||||||
|
|
||||||
|
/** Assert a specified host's alarm with a MINOR severity level */
|
||||||
|
int alarmUtil_minor ( string hostname, string identity, string instance, SFmAlarmDataT & alarm );
|
||||||
|
|
||||||
|
/** Assert a specified host's mtce alarm with a WARNING severity level */
|
||||||
|
int alarmUtil_warning ( string hostname, string identity, string instance, SFmAlarmDataT & alarm );
|
||||||
|
|
||||||
|
|
||||||
|
/*************************** L O G G I N G **********************************/
|
||||||
|
|
||||||
|
/** Create a CRITICAL log */
|
||||||
|
int alarmUtil_critical_log ( string hostname, string identity, string instance, SFmAlarmDataT & alarm );
|
||||||
|
|
||||||
|
/** Create a MAJOR log */
|
||||||
|
int alarmUtil_major_log ( string hostname, string identity, string instance, SFmAlarmDataT & alarm );
|
||||||
|
|
||||||
|
/** Create a MINOR log */
|
||||||
|
int alarmUtil_minor_log ( string hostname, string identity, string instance, SFmAlarmDataT & alarm );
|
||||||
|
|
||||||
|
/** Create a WARNING log */
|
||||||
|
int alarmUtil_warning_log ( string hostname, string identity, string instance, SFmAlarmDataT & alarm );
|
||||||
|
|
||||||
|
/** Create a neutral customer log */
|
||||||
|
int alarmUtil_log ( string hostname, string identity, string instance, SFmAlarmDataT & alarm );
|
||||||
|
|
||||||
|
#endif /* __ALARMUTIL_H__ */
|
170
mtce-common/cgts-mtce-common-1.0/common/fitCodes.h
Normal file
170
mtce-common/cgts-mtce-common-1.0/common/fitCodes.h
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
#ifndef __INCLUDE_FITCODES_H__
|
||||||
|
#define __INCLUDE_FITCODES_H__
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2013, 2016 Wind River Systems, Inc.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Wind River CGTS Platform Common Fault Insertion Code Definitions
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*************************************************************************************
|
||||||
|
*
|
||||||
|
* These definitions are used for fault insertion testing.
|
||||||
|
*
|
||||||
|
* Here are examples of how they are used,
|
||||||
|
*
|
||||||
|
* - touch the 'no_reboot' file on the mtcClient to cause it to
|
||||||
|
* servie the reboot request but don't actually reboot
|
||||||
|
*
|
||||||
|
* - touch the 'no_mgmnt_ack' file on the mtcClient to cause
|
||||||
|
* it to handle command requests but drop/not send the ack message
|
||||||
|
* if it came in on themanagement network ; same for infra
|
||||||
|
*
|
||||||
|
* - touch the 'no_mtcAlive file to tell mtcClient to stop sending
|
||||||
|
* its mtcAlive messages while this file is present.
|
||||||
|
*
|
||||||
|
**************************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the Fault Insertion Dir - Code that looks for multiple fit files need not
|
||||||
|
* bother if the dir is not present
|
||||||
|
**/
|
||||||
|
#define MTC_CMD_FIT__DIR ("/var/run/fit")
|
||||||
|
|
||||||
|
|
||||||
|
#define MTC_CMD_FIT__NO_REBOOT ("/var/run/fit/no_reboot") /* mtcClient */
|
||||||
|
#define MTC_CMD_FIT__NO_RESET ("/var/run/fit/no_reset") /* mtcClient */
|
||||||
|
#define MTC_CMD_FIT__NO_WIPEDISK ("/var/run/fit/no_wipedisk") /* mtcClient */
|
||||||
|
#define MTC_CMD_FIT__NO_MGMNT_ACK ("/var/run/fit/no_mgmnt_ack") /* mtcClient */
|
||||||
|
#define MTC_CMD_FIT__NO_INFRA_ACK ("/var/run/fit/no_infra_ack") /* mtcClient */
|
||||||
|
#define MTC_CMD_FIT__NO_MTCALIVE ("/var/run/fit/no_mtcalive") /* mtcClient */
|
||||||
|
#define MTC_CMD_FIT__MGMNT_RXSOCK ("/var/run/fit/mgmnt_rxsock") /* mtcClient */
|
||||||
|
#define MTC_CMD_FIT__MGMNT_TXSOCK ("/var/run/fit/mgmnt_txsock") /* mtcClient */
|
||||||
|
#define MTC_CMD_FIT__INFRA_RXSOCK ("/var/run/fit/infra_rxsock") /* mtcClient */
|
||||||
|
#define MTC_CMD_FIT__INFRA_TXSOCK ("/var/run/fit/infra_txsock") /* mtcClient */
|
||||||
|
#define MTC_CMD_FIT__RMON_SOCK ("/var/run/fit/rmon_sock") /* mtcClient */
|
||||||
|
#define MTC_CMD_FIT__AMON_SOCK ("/var/run/fit/amon_sock") /* mtcClient */
|
||||||
|
#define MTC_CMD_FIT__NO_INFRA_RSP ("/var/run/fit/no_infra_rsp") /* hbsClient */
|
||||||
|
#define MTC_CMD_FIT__NO_MGMNT_RSP ("/var/run/fit/no_mgmnt_rsp") /* hbsClient */
|
||||||
|
#define MTC_CMD_FIT__LINKLIST ("/var/run/fit/linklist") /* hbsAgent */
|
||||||
|
#define MTC_CMD_FIT__HBSSILENT ("/var/run/fit/hbs_silent_fault") /* hbsAgent */
|
||||||
|
#define MTC_CMD_FIT__SENSOR_DATA ("/var/run/fit/sensor_data") /* hwmond */
|
||||||
|
#define MTC_CMD_FIT__POWER_CMD ("/var/run/fit/power_cmd_result") /* mtcAgent */
|
||||||
|
#define MTC_CMD_FIT__MC_INFO ("/var/run/fit/mc_info") /* mtcAgent */
|
||||||
|
#define MTC_CMD_FIT__POWER_STATUS ("/var/run/fit/power_status") /* mtcAgent */
|
||||||
|
#define MTC_CMD_FIT__RESTART_CAUSE ("/var/run/fit/restart_cause") /* mtcAgent */
|
||||||
|
#define MTC_CMD_FIT__UPTIME ("/var/run/fit/uptime") /* mtcAgent */
|
||||||
|
#define MTC_CMD_FIT__LOUD_BM_PW ("/var/run/fit/loud_bm_pw") /* mtcAgent & hwmond */
|
||||||
|
#define MTC_CMD_FIT__START_SVCS ("/var/run/fit/host_services") /* mtcClient */
|
||||||
|
#define MTC_CMD_FIT__NO_HS_ACK ("/var/run/fit/no_hs_ack") /* mtcClient */
|
||||||
|
#define MTC_CMD_FIT__GOENABLE_AUDIT ("/var/run/fit/goenable_audit") /* mtcAgent */
|
||||||
|
|
||||||
|
/*****************************************************
|
||||||
|
* Fault Insertion Codes
|
||||||
|
*****************************************************/
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
*
|
||||||
|
* the fit /var/run/fit/fitinfo file contains the following format,
|
||||||
|
* - code and process are required
|
||||||
|
* - other fields are optional
|
||||||
|
* - no spaces, exclude <>
|
||||||
|
*
|
||||||
|
* proc=<process shortname>
|
||||||
|
* code=<decimal number>
|
||||||
|
* host=<hostname>
|
||||||
|
* name=<some string>
|
||||||
|
* data=<some string>
|
||||||
|
*
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
/*********************** Common FIT Codes **********************************/
|
||||||
|
|
||||||
|
#define FIT_CODE__NONE (0)
|
||||||
|
#define FIT_CODE__CORRUPT_TOKEN (1)
|
||||||
|
#define FIT_CODE__ADD_DELETE (2)
|
||||||
|
#define FIT_CODE__STUCK_TASK (3)
|
||||||
|
#define FIT_CODE__AVOID_N_FAIL_IPMITOOL_REQUEST (4)
|
||||||
|
#define FIT_CODE__THREAD_TIMEOUT (5)
|
||||||
|
#define FIT_CODE__THREAD_SEGFAULT (6)
|
||||||
|
#define FIT_CODE__SIGNAL_NOEXIT (7)
|
||||||
|
#define FIT_CODE__STRESS_THREAD (8)
|
||||||
|
#define FIT_CODE__DO_NOTHING_THREAD (9)
|
||||||
|
#define FIT_CODE__EMPTY_BM_PASSWORD (10)
|
||||||
|
#define FIT_CODE__INVALIDATE_MGMNT_IP (11)
|
||||||
|
#define FIT_CODE__INVALIDATE_INFRA_IP (12)
|
||||||
|
#define FIT_CODE__WORK_QUEUE (13)
|
||||||
|
#define FIT_CODE__NO_READY_EVENT (14)
|
||||||
|
#define FIT_CODE__NO_PULSE_REQUEST (15)
|
||||||
|
#define FIT_CODE__NO_PULSE_RESPONSE (16)
|
||||||
|
|
||||||
|
#define FIT_CODE__FAST_PING_AUDIT_HOST (20)
|
||||||
|
#define FIT_CODE__FAST_PING_AUDIT_ALL (21)
|
||||||
|
|
||||||
|
#define FIT_CODE__TRANSLATE_LOCK_TO_FORCELOCK (30)
|
||||||
|
#define FIT_CODE__LOCK_HOST (31)
|
||||||
|
#define FIT_CODE__FORCE_LOCK_HOST (32)
|
||||||
|
#define FIT_CODE__UNLOCK_HOST (33)
|
||||||
|
|
||||||
|
#define FIT_CODE__FM_SET_ALARM (40)
|
||||||
|
#define FIT_CODE__FM_GET_ALARM (41)
|
||||||
|
#define FIT_CODE__FM_QRY_ALARMS (42)
|
||||||
|
|
||||||
|
#define FIT_CODE__IPMI_COMMAND_SEND (60)
|
||||||
|
#define FIT_CODE__IPMI_COMMAND_RECV (61)
|
||||||
|
|
||||||
|
#define FIT_CODE__START_HOST_SERVICES (70)
|
||||||
|
#define FIT_CODE__STOP_HOST_SERVICES (71)
|
||||||
|
|
||||||
|
/***************** Process Fit Codes ********************************/
|
||||||
|
|
||||||
|
/* Hardware Monitor FIT Codes */
|
||||||
|
#define FIT_CODE__HWMON__CORRUPT_TOKEN (101)
|
||||||
|
#define FIT_CODE__HWMON__AVOID_TOKEN_REFRESH (102)
|
||||||
|
#define FIT_CODE__HWMON__THREAD_TIMEOUT (103)
|
||||||
|
#define FIT_CODE__HWMON__AVOID_SENSOR_QUERY (104)
|
||||||
|
#define FIT_CODE__HWMON__SENSOR_STATUS (105)
|
||||||
|
#define FIT_CODE__HWMON__STARTUP_STATES_FAILURE (106)
|
||||||
|
|
||||||
|
#define FIT_CODE__HWMON__HTTP_LOAD_SENSORS (120)
|
||||||
|
#define FIT_CODE__HWMON__HTTP_ADD_SENSOR (121)
|
||||||
|
#define FIT_CODE__HWMON__HTTP_DEL_SENSOR (122)
|
||||||
|
#define FIT_CODE__HWMON__HTTP_MOD_SENSOR (123)
|
||||||
|
|
||||||
|
#define FIT_CODE__HWMON__ADD_SENSOR (130)
|
||||||
|
#define FIT_CODE__HWMON__BAD_SENSOR (131)
|
||||||
|
#define FIT_CODE__HWMON__GET_SENSOR (132)
|
||||||
|
|
||||||
|
#define FIT_CODE__HWMON__CREATE_ORPHAN_SENSOR_ALARM (136)
|
||||||
|
|
||||||
|
|
||||||
|
#define FIT_CODE__HWMON__HTTP_LOAD_GROUPS (140)
|
||||||
|
#define FIT_CODE__HWMON__HTTP_ADD_GROUP (141)
|
||||||
|
#define FIT_CODE__HWMON__HTTP_DEL_GROUP (142)
|
||||||
|
#define FIT_CODE__HWMON__HTTP_MOD_GROUP (143)
|
||||||
|
#define FIT_CODE__HWMON__HTTP_GROUP_SENSORS (144)
|
||||||
|
|
||||||
|
#define FIT_CODE__HWMON__ADD_GROUP (150)
|
||||||
|
#define FIT_CODE__HWMON__BAD_GROUP (151)
|
||||||
|
#define FIT_CODE__HWMON__GET_GROUP (152)
|
||||||
|
|
||||||
|
#define FIT_CODE__HWMON__CREATE_ORPHAN_GROUP_ALARM (156)
|
||||||
|
|
||||||
|
#define FIT_CODE__HWMON__NO_DATA (160)
|
||||||
|
|
||||||
|
#define FIT_CODE__HWMON__RAISE_SENSOR_ALARM (170)
|
||||||
|
#define FIT_CODE__HWMON__CLEAR_SENSOR_ALARM (171)
|
||||||
|
#define FIT_CODE__HWMON__RAISE_GROUP_ALARM (172)
|
||||||
|
#define FIT_CODE__HWMON__CLEAR_GROUP_ALARM (173)
|
||||||
|
|
||||||
|
#define FIT_CODE__HWMON__SET_DB_SENSOR_STATUS (175)
|
||||||
|
#define FIT_CODE__HWMON__SET_DB_SENSOR_STATE (176)
|
||||||
|
#define FIT_CODE__HWMON__SET_DB_GROUP_STATUS (177)
|
||||||
|
#define FIT_CODE__HWMON__SET_DB_GROUP_STATE (178)
|
||||||
|
|
||||||
|
#endif /* __INCLUDE_FITCODES_H__ */
|
41
mtce-common/cgts-mtce-common-1.0/common/fsync.c
Normal file
41
mtce-common/cgts-mtce-common-1.0/common/fsync.c
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2014 Wind River Systems, Inc.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
|
||||||
|
/* helper app to fsync a single file/directory */
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
int fd,rc;
|
||||||
|
|
||||||
|
if (argc != 2) {
|
||||||
|
printf("usage: %s <path/to/file>\n", argv[0]);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
fd = open(argv[1], O_RDONLY);
|
||||||
|
if (fd == -1) {
|
||||||
|
printf("unable to open file %s: %m\n", argv[1]);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = fsync(fd);
|
||||||
|
if (rc == -1) {
|
||||||
|
printf("error fsyncing file %s: %m\n", argv[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (close(fd) == -1) {
|
||||||
|
printf("error closing file %s: %m\n", argv[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
454
mtce-common/cgts-mtce-common-1.0/common/hostClass.cpp
Normal file
454
mtce-common/cgts-mtce-common-1.0/common/hostClass.cpp
Normal file
@ -0,0 +1,454 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015 Wind River Systems, Inc.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Wind River CGTS Platform Host Base Class Member Implementation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <string>
|
||||||
|
#include <errno.h> /* for ENODEV, EFAULT and ENXIO */
|
||||||
|
#include <unistd.h> /* for close and usleep */
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
#ifdef __AREA__
|
||||||
|
#undef __AREA__
|
||||||
|
#define __AREA__ "~~~"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "nodeBase.h"
|
||||||
|
#include "hostClass.h"
|
||||||
|
#include "nodeUtil.h"
|
||||||
|
|
||||||
|
|
||||||
|
hostBaseClass::hostBaseClass() /* constructor */
|
||||||
|
{
|
||||||
|
for(unsigned int i = 0; i < MAX_HOSTS; ++i)
|
||||||
|
{
|
||||||
|
host_ptrs[i] = NULL;
|
||||||
|
}
|
||||||
|
bm_provisioned= false;
|
||||||
|
head = tail = NULL;
|
||||||
|
memory_allocs = 0 ;
|
||||||
|
memory_used = 0 ;
|
||||||
|
hosts = 0 ;
|
||||||
|
service = 0 ;
|
||||||
|
|
||||||
|
/* Start with null identity */
|
||||||
|
my_hostname.clear() ;
|
||||||
|
my_local_ip.clear() ;
|
||||||
|
my_float_ip.clear() ;
|
||||||
|
}
|
||||||
|
|
||||||
|
hostBaseClass::~hostBaseClass() /* destructor */
|
||||||
|
{
|
||||||
|
host * ptr = head ;
|
||||||
|
host * temp_ptr = ptr ;
|
||||||
|
while ( ptr != NULL )
|
||||||
|
{
|
||||||
|
temp_ptr = ptr ;
|
||||||
|
ptr = ptr->next ;
|
||||||
|
delHost (temp_ptr);
|
||||||
|
}
|
||||||
|
if ( memory_used != 0 )
|
||||||
|
{
|
||||||
|
elog ( "Apparent Memory Leak - Allocs:%d and Bytes:%d\n",
|
||||||
|
memory_allocs, memory_used );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dlog ( "No Memory Leaks\n\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Allocates memory for a new host and stores its the address in host_ptrs
|
||||||
|
*
|
||||||
|
* @param void
|
||||||
|
* @return pointer to the newly allocted host memory
|
||||||
|
*/
|
||||||
|
struct hostBaseClass::host * hostBaseClass::newHost ( void )
|
||||||
|
{
|
||||||
|
struct hostBaseClass::host * host_ptr = NULL ;
|
||||||
|
|
||||||
|
if ( memory_allocs == 0 )
|
||||||
|
{
|
||||||
|
memset ( host_ptrs, 0 , sizeof(struct host *)*MAX_HOSTS);
|
||||||
|
}
|
||||||
|
|
||||||
|
// find an empty spot
|
||||||
|
for ( int i = 0 ; i < MAX_HOSTS ; i++ )
|
||||||
|
{
|
||||||
|
if ( host_ptrs[i] == NULL )
|
||||||
|
{
|
||||||
|
host_ptrs[i] = host_ptr = new host ;
|
||||||
|
memory_allocs++ ;
|
||||||
|
memory_used += sizeof (struct hostBaseClass::host);
|
||||||
|
// ilog ("%p:%p - mem after new: allocs:%d used:%d\n", host_ptr , host_ptrs[i], memory_allocs, memory_used);
|
||||||
|
return host_ptr ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elog ( "Failed to save new host pointer address\n" );
|
||||||
|
return host_ptr ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Frees the memory of a pre-allocated host and removes
|
||||||
|
* it from the host_ptrs list
|
||||||
|
* @param host * pointer to the host memory address to be freed
|
||||||
|
* @return int return code { PASS or -EINVAL }
|
||||||
|
*/
|
||||||
|
int hostBaseClass::delHost ( struct hostBaseClass::host * host_ptr )
|
||||||
|
{
|
||||||
|
if ( memory_allocs > 0 )
|
||||||
|
{
|
||||||
|
for ( int i = 0 ; i < MAX_NODES ; i++ )
|
||||||
|
{
|
||||||
|
if ( host_ptrs[i] == host_ptr )
|
||||||
|
{
|
||||||
|
// ilog ("%p:%p - mem before del: allocs:%d used:%d\n", host_ptr , host_ptrs[i], memory_allocs, memory_used);
|
||||||
|
delete host_ptr ;
|
||||||
|
host_ptrs[i] = NULL ;
|
||||||
|
memory_allocs-- ;
|
||||||
|
memory_used -= sizeof (struct hostBaseClass::host);
|
||||||
|
return PASS ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elog ( "Error: Unable to validate memory address being freed\n" );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
elog ( "Error: Free memory called when there is no memory to free\n" );
|
||||||
|
|
||||||
|
return -EINVAL ;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Allocate new host and tack it on the end of the host_list
|
||||||
|
*/
|
||||||
|
struct
|
||||||
|
hostBaseClass::host* hostBaseClass::addHost( string hostname )
|
||||||
|
{
|
||||||
|
/* verify host is not already provisioned */
|
||||||
|
struct host * ptr = getHost ( hostname );
|
||||||
|
if ( ptr )
|
||||||
|
{
|
||||||
|
if ( remHost ( hostname ) )
|
||||||
|
{
|
||||||
|
/* Should never get here but if we do then */
|
||||||
|
/* something is seriously wrong */
|
||||||
|
elog ("Error: Unable to remove host during reprovision\n");
|
||||||
|
return static_cast<struct host *>(NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* allocate memory for new host */
|
||||||
|
ptr = newHost ();
|
||||||
|
if( ptr == NULL )
|
||||||
|
{
|
||||||
|
elog ( "Error: Failed to allocate memory for new host\n" );
|
||||||
|
return static_cast<struct host *>(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Init the new host */
|
||||||
|
ptr->hostname = hostname ;
|
||||||
|
|
||||||
|
/* If the host list is empty add it to the head */
|
||||||
|
if( head == NULL )
|
||||||
|
{
|
||||||
|
head = ptr ;
|
||||||
|
tail = ptr ;
|
||||||
|
ptr->prev = NULL ;
|
||||||
|
ptr->next = NULL ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* link the new_host to the tail of the host_list
|
||||||
|
* then mark the next field as the end of the host_list
|
||||||
|
* adjust tail to point to the last host
|
||||||
|
*/
|
||||||
|
tail->next = ptr ;
|
||||||
|
ptr->prev = tail ;
|
||||||
|
ptr->next = NULL ;
|
||||||
|
tail = ptr ;
|
||||||
|
}
|
||||||
|
|
||||||
|
hosts++ ;
|
||||||
|
|
||||||
|
return ptr ;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct hostBaseClass::host* hostBaseClass::getHost ( string hostname )
|
||||||
|
{
|
||||||
|
/* check for empty list condition */
|
||||||
|
if ( head == NULL )
|
||||||
|
return NULL ;
|
||||||
|
|
||||||
|
for ( struct host * ptr = head ; ; ptr = ptr->next )
|
||||||
|
{
|
||||||
|
if ( !hostname.compare ( ptr->hostname ))
|
||||||
|
{
|
||||||
|
// ilog ("%s %p\n", hostname.c_str(), ptr );
|
||||||
|
return ptr ;
|
||||||
|
}
|
||||||
|
else if ( !hostname.compare ( ptr->uuid ))
|
||||||
|
{
|
||||||
|
// ilog ("%s %p\n", hostname.c_str(), ptr );
|
||||||
|
return ptr ;
|
||||||
|
}
|
||||||
|
if (( ptr->next == NULL ) || ( ptr == tail ))
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
return static_cast<struct host *>(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Remove a hist from the linked list of hosts - may require splice action */
|
||||||
|
int hostBaseClass::remHost( string hostname )
|
||||||
|
{
|
||||||
|
if ( hostname.c_str() == NULL )
|
||||||
|
return -ENODEV ;
|
||||||
|
|
||||||
|
if ( head == NULL )
|
||||||
|
return -ENXIO ;
|
||||||
|
|
||||||
|
struct host * ptr = getHost ( hostname );
|
||||||
|
|
||||||
|
if ( ptr == NULL )
|
||||||
|
return -EFAULT ;
|
||||||
|
|
||||||
|
/* If the host is the head host */
|
||||||
|
if ( ptr == head )
|
||||||
|
{
|
||||||
|
/* only one host in the list case */
|
||||||
|
if ( head == tail )
|
||||||
|
{
|
||||||
|
dlog ("Single Host -> Head Case\n");
|
||||||
|
head = NULL ;
|
||||||
|
tail = NULL ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dlog ("Multiple Hosts -> Head Case\n");
|
||||||
|
head = head->next ;
|
||||||
|
head->prev = NULL ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* if not head but tail then there must be more than one
|
||||||
|
* host in the list so go ahead and chop the tail.
|
||||||
|
*/
|
||||||
|
else if ( ptr == tail )
|
||||||
|
{
|
||||||
|
dlog ("Multiple Host -> Tail Case\n");
|
||||||
|
tail = tail->prev ;
|
||||||
|
tail->next = NULL ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dlog ("Multiple Host -> Full Splice Out\n");
|
||||||
|
ptr->prev->next = ptr->next ;
|
||||||
|
ptr->next->prev = ptr->prev ;
|
||||||
|
}
|
||||||
|
delHost ( ptr );
|
||||||
|
hosts-- ;
|
||||||
|
return (PASS) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************************************************
|
||||||
|
******************************************************************************************
|
||||||
|
*****************************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int hostBaseClass::add_host ( node_inv_type & inv )
|
||||||
|
{
|
||||||
|
int rc = FAIL ;
|
||||||
|
struct hostBaseClass::host * host_ptr = static_cast<struct host *>(NULL);
|
||||||
|
|
||||||
|
if (( inv.name.empty()) ||
|
||||||
|
( !inv.name.compare ("none")) ||
|
||||||
|
( !inv.name.compare ("None")))
|
||||||
|
{
|
||||||
|
wlog ("Refusing to add host with 'null' or 'invalid' hostname (%s)\n",
|
||||||
|
inv.uuid.c_str());
|
||||||
|
return (FAIL_INVALID_HOSTNAME) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
host_ptr = hostBaseClass::getHost(inv.name);
|
||||||
|
if ( host_ptr )
|
||||||
|
{
|
||||||
|
dlog ("%s Already provisioned\n", host_ptr->hostname.c_str());
|
||||||
|
|
||||||
|
/* Send back a retry in case the add needs to be converted to a modify */
|
||||||
|
return (RETRY);
|
||||||
|
}
|
||||||
|
/* Otherwise add it as a new host */
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( daemon_get_cfg_ptr()->debug_level > 1 )
|
||||||
|
print_inv ( inv );
|
||||||
|
|
||||||
|
host_ptr = hostBaseClass::addHost(inv.name);
|
||||||
|
if ( host_ptr )
|
||||||
|
{
|
||||||
|
host_ptr->ip = inv.ip ;
|
||||||
|
host_ptr->mac = inv.mac ;
|
||||||
|
host_ptr->uuid = inv.uuid ;
|
||||||
|
|
||||||
|
host_ptr->type = inv.type ;
|
||||||
|
host_ptr->nodetype = CGTS_NODE_NULL ;
|
||||||
|
|
||||||
|
host_ptr->retries = 0 ;
|
||||||
|
host_ptr->toggle = false ;
|
||||||
|
|
||||||
|
/* Add to the end of inventory */
|
||||||
|
hostlist.push_back ( host_ptr->hostname );
|
||||||
|
dlog ("%s Added Host Base\n", inv.name.c_str());
|
||||||
|
rc = PASS ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
elog ("%s Host Base Add Failed\n", inv.name.c_str());
|
||||||
|
rc = FAIL_NULL_POINTER ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (rc);
|
||||||
|
}
|
||||||
|
|
||||||
|
int hostBaseClass::rem_host ( string hostname )
|
||||||
|
{
|
||||||
|
int rc = FAIL ;
|
||||||
|
if ( ! hostname.empty() )
|
||||||
|
{
|
||||||
|
hostlist.remove ( hostname );
|
||||||
|
rc = hostBaseClass::remHost ( hostname );
|
||||||
|
}
|
||||||
|
return ( rc );
|
||||||
|
}
|
||||||
|
|
||||||
|
int hostBaseClass::del_host ( string hostname )
|
||||||
|
{
|
||||||
|
int rc = FAIL_DEL_UNKNOWN ;
|
||||||
|
hostBaseClass::host * host_ptr = hostBaseClass::getHost( hostname );
|
||||||
|
if ( host_ptr )
|
||||||
|
{
|
||||||
|
rc = rem_host ( host_ptr->hostname );
|
||||||
|
if ( rc == PASS )
|
||||||
|
{
|
||||||
|
dlog ("%s Deleted\n", host_ptr->hostname.c_str());
|
||||||
|
print_node_info();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
elog ("%s Delete Failed (rc:%d)\n", hostname.c_str(), rc );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
wlog ("Unknown hostname: %s\n", hostname.c_str());
|
||||||
|
}
|
||||||
|
return (rc);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get this hosts uuid address */
|
||||||
|
string hostBaseClass::get_uuid ( string hostname )
|
||||||
|
{
|
||||||
|
hostBaseClass::host * host_ptr ;
|
||||||
|
host_ptr = hostBaseClass::getHost ( hostname );
|
||||||
|
if ( host_ptr != NULL )
|
||||||
|
{
|
||||||
|
return (host_ptr->uuid );
|
||||||
|
}
|
||||||
|
elog ("%s uuid lookup failed\n", hostname.c_str() );
|
||||||
|
return ("");
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get this hosts uuid address */
|
||||||
|
string hostBaseClass::get_hostname ( string uuid )
|
||||||
|
{
|
||||||
|
hostBaseClass::host * host_ptr ;
|
||||||
|
host_ptr = hostBaseClass::getHost ( uuid );
|
||||||
|
if ( host_ptr != NULL )
|
||||||
|
{
|
||||||
|
return (host_ptr->hostname );
|
||||||
|
}
|
||||||
|
elog ("%s hostname lookup failed\n", uuid.c_str() );
|
||||||
|
return ("");
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get this hosts ip address */
|
||||||
|
string hostBaseClass::get_ip ( string hostname )
|
||||||
|
{
|
||||||
|
hostBaseClass::host * host_ptr ;
|
||||||
|
host_ptr = hostBaseClass::getHost ( hostname );
|
||||||
|
if ( host_ptr != NULL )
|
||||||
|
{
|
||||||
|
return (host_ptr->ip );
|
||||||
|
}
|
||||||
|
elog ("%s ip lookup failed\n", hostname.c_str() );
|
||||||
|
return ("");
|
||||||
|
}
|
||||||
|
|
||||||
|
static string null_str = "" ;
|
||||||
|
string hostBaseClass::get_hostaddr ( string hostname )
|
||||||
|
{
|
||||||
|
hostBaseClass::host* host_ptr ;
|
||||||
|
host_ptr = hostBaseClass::getHost ( hostname );
|
||||||
|
if ( host_ptr != NULL )
|
||||||
|
{
|
||||||
|
return ( host_ptr->ip );
|
||||||
|
}
|
||||||
|
return ( null_str );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void hostBaseClass::print_node_info ( void )
|
||||||
|
{
|
||||||
|
fflush (stdout);
|
||||||
|
fflush (stderr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void hostBaseClass::memLogDelimit ( void )
|
||||||
|
{
|
||||||
|
char str[MAX_MEM_LOG_DATA] ;
|
||||||
|
snprintf (&str[0], MAX_MEM_LOG_DATA, "-------------------------------------------------------------\n");
|
||||||
|
mem_log (str);
|
||||||
|
}
|
||||||
|
|
||||||
|
void hostBaseClass::mem_log_host ( struct hostBaseClass::host * host_ptr )
|
||||||
|
{
|
||||||
|
char str[MAX_MEM_LOG_DATA] ;
|
||||||
|
snprintf (&str[0], MAX_MEM_LOG_DATA, "%s\t%s - %s - %s - %s\n",
|
||||||
|
host_ptr->hostname.c_str(),
|
||||||
|
host_ptr->ip.c_str(),
|
||||||
|
host_ptr->mac.c_str(),
|
||||||
|
host_ptr->uuid.c_str(),
|
||||||
|
host_ptr->type.c_str());
|
||||||
|
mem_log (str);
|
||||||
|
}
|
||||||
|
|
||||||
|
void hostBaseClass::memDumpNodeState ( string hostname )
|
||||||
|
{
|
||||||
|
hostBaseClass::host* host_ptr ;
|
||||||
|
host_ptr = hostBaseClass::getHost ( hostname );
|
||||||
|
if ( host_ptr == NULL )
|
||||||
|
{
|
||||||
|
mem_log ( hostname, ": ", "Not Found hostBaseClass\n" );
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mem_log_host ( host_ptr );
|
||||||
|
// memLogDelimit ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
221
mtce-common/cgts-mtce-common-1.0/common/hostClass.h
Normal file
221
mtce-common/cgts-mtce-common-1.0/common/hostClass.h
Normal file
@ -0,0 +1,221 @@
|
|||||||
|
#ifndef __INCLUDE_HOSTCLASS_H__
|
||||||
|
#define __INCLUDE_HOSTCLASS_H__
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2015 Wind River Systems, Inc.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Wind River CGTS Platform Host Maintenance "Host Manager"
|
||||||
|
* class, support structs and enums.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <list>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
//using namespace std;
|
||||||
|
|
||||||
|
#include "nodeTimers.h" /* for ... mtcTimer */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @addtogroup hostBaseClass
|
||||||
|
* @{
|
||||||
|
* This class is used to maintain a linked list of hosts for a given application.
|
||||||
|
*/
|
||||||
|
|
||||||
|
class hostBaseClass
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A single host entity within the hostBaseClass.
|
||||||
|
* Used to build a linked list of added/provisioned hosts.
|
||||||
|
*/
|
||||||
|
struct host {
|
||||||
|
|
||||||
|
/** The name of the host */
|
||||||
|
std::string hostname ;
|
||||||
|
|
||||||
|
/** The name of the host */
|
||||||
|
std::string uuid ;
|
||||||
|
|
||||||
|
/** The IP address of the host */
|
||||||
|
std::string ip ;
|
||||||
|
|
||||||
|
/** The Mac address of the host node */
|
||||||
|
std::string mac ;
|
||||||
|
|
||||||
|
/** A string indicating the host type as 'compute' , 'storage' or 'controller' */
|
||||||
|
std::string type ;
|
||||||
|
|
||||||
|
/** The Type ; host specific service refinement */
|
||||||
|
int nodetype ;
|
||||||
|
|
||||||
|
/** general retry counter */
|
||||||
|
int retries ;
|
||||||
|
|
||||||
|
/** Generic toggle switch */
|
||||||
|
bool toggle ;
|
||||||
|
|
||||||
|
/** Pointer to the previous host in the list */
|
||||||
|
struct host * prev;
|
||||||
|
|
||||||
|
/** Pointer to the next host in the list */
|
||||||
|
struct host * next;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
struct host * head ; /**< Host Linked List Head pointer */
|
||||||
|
struct host * tail ; /**< Host Linked List Tail pointer */
|
||||||
|
|
||||||
|
/** Allocate memory for a new host.
|
||||||
|
*
|
||||||
|
* Preserves the host address in the host_ptr list and increments
|
||||||
|
* the memory_allocs counter used by the inservice test audit.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* a pointer to the memory of the newly allocated host */
|
||||||
|
struct hostBaseClass::host * newHost ( void );
|
||||||
|
|
||||||
|
/** Start heartbeating a new host.
|
||||||
|
*
|
||||||
|
* host is added to the end of the host linked list.
|
||||||
|
*
|
||||||
|
* @param host_info_ptr
|
||||||
|
* is a pointer containing pertinent info about the physical host
|
||||||
|
* @return
|
||||||
|
* a pointer to the newly added host
|
||||||
|
*/
|
||||||
|
struct hostBaseClass::host* addHost ( string hostname );
|
||||||
|
|
||||||
|
/** Get pointer to "hostname" host.
|
||||||
|
*
|
||||||
|
* Host list lookup by pointer from hostname.
|
||||||
|
*
|
||||||
|
* @param host_info_ptr
|
||||||
|
* is a pointer containing info required to find the host in the host list
|
||||||
|
* @return
|
||||||
|
* a pointer to the hostname's host
|
||||||
|
*/
|
||||||
|
struct hostBaseClass::host* getHost ( string hostname );
|
||||||
|
|
||||||
|
/** Free the memory of a previously allocated host.
|
||||||
|
*
|
||||||
|
* The memory to be removed is found in the host_ptr list, cleared and
|
||||||
|
* the memory_allocs counter is decremented.
|
||||||
|
* If the memory cannot be found then an error is returned.
|
||||||
|
*
|
||||||
|
* @param host_ptr
|
||||||
|
* is a pointer to the host to be freed
|
||||||
|
* @return
|
||||||
|
* a signed integer of PASS or -EINVAL
|
||||||
|
*/
|
||||||
|
int delHost ( struct hostBaseClass::host * host_ptr );
|
||||||
|
|
||||||
|
|
||||||
|
/** Remove a host from the linked list.
|
||||||
|
*
|
||||||
|
* Node is spliced out of the host linked list.
|
||||||
|
*
|
||||||
|
* @param node_info_ptr
|
||||||
|
* is a pointer containing info required to find the host in the host list
|
||||||
|
* @return
|
||||||
|
* an integer of PASS or -EINVAL */
|
||||||
|
int remHost ( string hostname );
|
||||||
|
|
||||||
|
/** List of allocated host memory.
|
||||||
|
*
|
||||||
|
* An array of host pointers.
|
||||||
|
*/
|
||||||
|
hostBaseClass::host * host_ptrs[MAX_HOSTS] ;
|
||||||
|
|
||||||
|
/** A memory allocation counter.
|
||||||
|
*
|
||||||
|
* Should represent the number of hosts in the linked list.
|
||||||
|
*/
|
||||||
|
int memory_allocs ;
|
||||||
|
|
||||||
|
/** A memory used counter
|
||||||
|
*
|
||||||
|
* A variable storing the accumulated host memory
|
||||||
|
*/
|
||||||
|
int memory_used ;
|
||||||
|
|
||||||
|
void mem_log_host ( struct hostBaseClass::host * host_ptr );
|
||||||
|
|
||||||
|
/** Public Interfaces that allow hosts to be
|
||||||
|
* added or removed from maintenance.
|
||||||
|
*/
|
||||||
|
public:
|
||||||
|
|
||||||
|
hostBaseClass(); /**< constructor */
|
||||||
|
~hostBaseClass(); /**< destructor */
|
||||||
|
|
||||||
|
/**< The service this list is associated with */
|
||||||
|
int service ;
|
||||||
|
|
||||||
|
int hosts ;
|
||||||
|
|
||||||
|
string my_hostname ; /**< My hostname */
|
||||||
|
string my_local_ip ; /**< Primary IP address */
|
||||||
|
string my_float_ip ; /**< Secondary (floating) IP address */
|
||||||
|
|
||||||
|
|
||||||
|
bool bm_provisioned ;
|
||||||
|
|
||||||
|
/** Add a host to the linked list using public API */
|
||||||
|
int add_host ( node_inv_type & inv );
|
||||||
|
|
||||||
|
/** Mod a host to the linked list using public API */
|
||||||
|
int mod_host ( node_inv_type & inv );
|
||||||
|
|
||||||
|
/** Remove a host from the linked list using public API */
|
||||||
|
int rem_host ( string hostname );
|
||||||
|
|
||||||
|
/** Free the memory of an already allocated host link using public API */
|
||||||
|
int del_host ( string hostname );
|
||||||
|
|
||||||
|
string get_ip ( string hostname );
|
||||||
|
string get_uuid ( string hostname );
|
||||||
|
string get_hostaddr ( string hostname );
|
||||||
|
string get_hostname ( string uuid );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void memLogDelimit ( void ); /**< Debug log delimiter */
|
||||||
|
void memDumpNodeState ( string hostname );
|
||||||
|
void memDumpAllState ( void );
|
||||||
|
void print_node_info ( void ); /**< Print node info banner */
|
||||||
|
|
||||||
|
/** This is a list of host names. */
|
||||||
|
std::list<string> hostlist ;
|
||||||
|
std::list<string>::iterator hostlist_iter_ptr ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} ;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @addtogroup hostBaseClass_base
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
hostBaseClass * get_hostBaseClass_ptr ( void );
|
||||||
|
|
||||||
|
/* allocates hostBaseClass obj_ptr and host_ptr */
|
||||||
|
#define GET_HOST_PTR(hostname) \
|
||||||
|
hostBaseClass * obj_ptr = get_hostBaseClass_ptr () ; \
|
||||||
|
hostBaseClass::host * host_ptr = obj_ptr->getHost ( hostname ) ; \
|
||||||
|
if ( host_ptr == NULL ) \
|
||||||
|
{ \
|
||||||
|
elog ("%s hostname unknown\n", hostname.c_str()); \
|
||||||
|
return (FAIL_HOSTNAME_LOOKUP); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __INCLUDE_HOSTCLASS_H__
|
209
mtce-common/cgts-mtce-common-1.0/common/hostUtil.cpp
Normal file
209
mtce-common/cgts-mtce-common-1.0/common/hostUtil.cpp
Normal file
@ -0,0 +1,209 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2013, 2016 Wind River Systems, Inc.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Wind River CGCS Platform - Host Server Utility Module
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "hostUtil.h"
|
||||||
|
|
||||||
|
string hostUtil_getServiceIp ( mtc_service_enum service )
|
||||||
|
{
|
||||||
|
string ip = "0.0.0.0" ;
|
||||||
|
|
||||||
|
daemon_config_type * cfg_ptr = daemon_get_cfg_ptr();
|
||||||
|
|
||||||
|
switch (service)
|
||||||
|
{
|
||||||
|
case SERVICE_SYSINV:
|
||||||
|
{
|
||||||
|
ip = cfg_ptr->sysinv_api_bind_ip ;
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
case SERVICE_TOKEN:
|
||||||
|
{
|
||||||
|
if ( cfg_ptr->keystone_auth_host)
|
||||||
|
{
|
||||||
|
ip = cfg_ptr->keystone_auth_host;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ip = "localhost";
|
||||||
|
}
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
case SERVICE_SMGR:
|
||||||
|
case SERVICE_VIM:
|
||||||
|
{
|
||||||
|
ip = "localhost" ;
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
slog ("Unsupported service (%d)\n", service );
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (ip);
|
||||||
|
}
|
||||||
|
|
||||||
|
string hostUtil_getPrefixPath ( )
|
||||||
|
{
|
||||||
|
string prefix_path = "";
|
||||||
|
|
||||||
|
daemon_config_type * cfg_ptr = daemon_get_cfg_ptr();
|
||||||
|
|
||||||
|
if ( cfg_ptr->keystone_prefix_path)
|
||||||
|
{
|
||||||
|
prefix_path = cfg_ptr->keystone_prefix_path;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (prefix_path);
|
||||||
|
}
|
||||||
|
|
||||||
|
int hostUtil_getServicePort ( mtc_service_enum service )
|
||||||
|
{
|
||||||
|
daemon_config_type * cfg_ptr = daemon_get_cfg_ptr();
|
||||||
|
|
||||||
|
switch (service)
|
||||||
|
{
|
||||||
|
case SERVICE_SYSINV:
|
||||||
|
return(cfg_ptr->sysinv_api_port);
|
||||||
|
|
||||||
|
case SERVICE_SMGR:
|
||||||
|
return(cfg_ptr->ha_port);
|
||||||
|
|
||||||
|
case SERVICE_VIM:
|
||||||
|
return(cfg_ptr->vim_cmd_port);
|
||||||
|
|
||||||
|
case SERVICE_TOKEN:
|
||||||
|
return(cfg_ptr->keystone_port);
|
||||||
|
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
slog ("Unsupported service (%d)\n", service );
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool hostUtil_is_valid_ip_addr ( string ip )
|
||||||
|
{
|
||||||
|
if ( !ip.empty() )
|
||||||
|
if ( ip.compare(NONE) )
|
||||||
|
return (true);
|
||||||
|
return (false);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool hostUtil_is_valid_mac_addr ( string mac )
|
||||||
|
{
|
||||||
|
if ( !mac.empty() )
|
||||||
|
if ( mac.length() == COL_CHARS_IN_MAC_ADDR )
|
||||||
|
return (true);
|
||||||
|
return (false);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool hostUtil_is_valid_bm_type ( string bm_type )
|
||||||
|
{
|
||||||
|
dlog3 ("BM_Type:%s\n", bm_type.c_str());
|
||||||
|
if ( !bm_type.empty() )
|
||||||
|
{
|
||||||
|
if (( bm_type == "bmc" ) ||
|
||||||
|
( bm_type == "ilo" ) ||
|
||||||
|
( bm_type == "ilo3" ) ||
|
||||||
|
( bm_type == "ilo4" ) ||
|
||||||
|
( bm_type == "quanta" ))
|
||||||
|
{
|
||||||
|
return (true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ( false );
|
||||||
|
}
|
||||||
|
|
||||||
|
bool hostUtil_is_valid_uuid ( string uuid )
|
||||||
|
{
|
||||||
|
if (( !uuid.empty() ) && ( uuid.length() == UUID_LEN ) )
|
||||||
|
return (true);
|
||||||
|
return (false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
*
|
||||||
|
* Name : hostUtil_tmpfile
|
||||||
|
*
|
||||||
|
* Description : Create a temporary file with a randomized suffix.
|
||||||
|
* Write the specified 'data' to it and return its
|
||||||
|
* open file descriptor.
|
||||||
|
*
|
||||||
|
* The file is unlinked so that it is automatically deleted by the kernel
|
||||||
|
* when the file descriptor is closed or the program exits.
|
||||||
|
*
|
||||||
|
* TODO: fix or figure out why the unlink removes the file right away even
|
||||||
|
* with the file open.
|
||||||
|
*
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
int hostUtil_mktmpfile ( string hostname, string basename, string & filename, string data )
|
||||||
|
{
|
||||||
|
// buffer to hold the temporary file name
|
||||||
|
char tempBuff[MAX_FILENAME_LEN];
|
||||||
|
|
||||||
|
int fd = -1;
|
||||||
|
|
||||||
|
memset(tempBuff,0,sizeof(tempBuff));
|
||||||
|
|
||||||
|
if ( basename.empty() || data.empty() )
|
||||||
|
{
|
||||||
|
slog ("%s called with one or more bad parameters (%d:%d)\n",
|
||||||
|
hostname.c_str(), basename.empty(), data.empty());
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* add what mkstemp will make unique */
|
||||||
|
basename.append("XXXXXX");
|
||||||
|
|
||||||
|
// Copy the relevant information in the buffers
|
||||||
|
snprintf ( &tempBuff[0], MAX_FILENAME_LEN, "%s", basename.data());
|
||||||
|
|
||||||
|
// Create the temporary file, this function will
|
||||||
|
// replace the 'X's with random letters
|
||||||
|
fd = mkstemp(tempBuff);
|
||||||
|
|
||||||
|
// Call unlink so that whenever the file is closed or the program exits
|
||||||
|
// the temporary file is deleted.
|
||||||
|
//
|
||||||
|
// Note: Unlinking removes the file immediately.
|
||||||
|
// Commenting out. Caller must remove file.
|
||||||
|
//
|
||||||
|
// unlink(tempBuff);
|
||||||
|
|
||||||
|
if(fd<1)
|
||||||
|
{
|
||||||
|
elog ("%s failed to create temp file (%d:%m)\n", hostname.c_str(), errno );
|
||||||
|
return 0 ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
filename = tempBuff ;
|
||||||
|
dlog2 ("%s temporary file [%s] created\n", hostname.c_str(), tempBuff );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write the data to the temporary file
|
||||||
|
if ( write ( fd, data.data(), data.size()) < 0 )
|
||||||
|
{
|
||||||
|
elog ("%s failed to write data to '%s' (%d:%m)\n",
|
||||||
|
hostname.c_str(), filename.c_str(), errno );
|
||||||
|
return 0 ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dlog2 ("%s wrote %s to %s\n", hostname.c_str(), data.c_str(), filename.c_str());
|
||||||
|
}
|
||||||
|
return (fd);
|
||||||
|
}
|
85
mtce-common/cgts-mtce-common-1.0/common/hostUtil.h
Normal file
85
mtce-common/cgts-mtce-common-1.0/common/hostUtil.h
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
#ifndef __INCLUDE_HOSTUTIL_H__
|
||||||
|
#define __INCLUDE_HOSTUTIL_H__
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2013-2014, 2016 Wind River Systems, Inc.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <list>
|
||||||
|
#include <evhttp.h> /* for ... HTTP_ status definitions */
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
#include "nodeBase.h"
|
||||||
|
|
||||||
|
/* Supported Server Names */
|
||||||
|
//#define SERVER__UNKNOWN ((const char*)"Undetermined Server")
|
||||||
|
//#define SERVER__NOKIA_QUANTA_1234_GEN1 ((const char*)"Quanta Computer")
|
||||||
|
//#define SERVER__HP_PROLIANT_DL380_GEN9 ((const char*)"ProLiant DL380 Gen9")
|
||||||
|
//#define SERVER__HP_PROLIANT_DL360_GEN9 ((const char*)"ProLiant DL360 Gen9")
|
||||||
|
|
||||||
|
/* Supported Board Management Controller Names */
|
||||||
|
//#define SERVER_BMC__UNKNOWN ((const char*)"Unknown BMC")
|
||||||
|
//#define SERVER_BMC__STANDARD_ILO_V3 ((const char*)"iLO 3 Standard")
|
||||||
|
//#define SERVER_BMC__STANDARD_ILO_V4 ((const char*)"iLO 4 Standard")
|
||||||
|
|
||||||
|
|
||||||
|
/* A list of supported servers */
|
||||||
|
//typedef enum
|
||||||
|
//{
|
||||||
|
// SERVER_IS_UNKNOWN = 0,
|
||||||
|
// SERVER_IS_NOKIA__QUANTA_1234____GEN1__ILO_V4 = 1,
|
||||||
|
// SERVER_IS_HP_____PROLIANT_DL380_GEN9__ILO_V4 = 2,
|
||||||
|
// SERVER_IS_HP_____PROLIANT_DL360_GEN9__ILO_V4 = 3,
|
||||||
|
// SERVER_IS_LAST = 4
|
||||||
|
//} server_enum ;
|
||||||
|
|
||||||
|
/* Server Table Entry Type */
|
||||||
|
//typedef struct
|
||||||
|
//{
|
||||||
|
// server_enum server_code ;
|
||||||
|
// protocol_enum protocol ;
|
||||||
|
// const char * server_name ;
|
||||||
|
// const char * server_bmc ;
|
||||||
|
// const char * profile ;
|
||||||
|
//
|
||||||
|
//} server_table_entry_type ;
|
||||||
|
//server_table_entry_type * hostUtil_get_server_info ( server_enum server_code );
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
CLIENT_NONE = 0,
|
||||||
|
CLIENT_SYSINV = 1,
|
||||||
|
CLIENT_VIM_HOSTS = 2,
|
||||||
|
CLIENT_VIM_SYSTEMS = 3,
|
||||||
|
CLIENT_SENSORS = 4,
|
||||||
|
CLIENT_SENSORGROUPS = 5,
|
||||||
|
CLIENT_SM = 6,
|
||||||
|
} mtc_client_enum ;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
SERVICE_SYSINV = 0,
|
||||||
|
SERVICE_TOKEN = 1,
|
||||||
|
SERVICE_SMGR = 2,
|
||||||
|
SERVICE_VIM = 3,
|
||||||
|
} mtc_service_enum ;
|
||||||
|
|
||||||
|
string hostUtil_getServiceIp ( mtc_service_enum service );
|
||||||
|
int hostUtil_getServicePort ( mtc_service_enum service );
|
||||||
|
string hostUtil_getPrefixPath ( void );
|
||||||
|
|
||||||
|
bool hostUtil_is_valid_uuid ( string uuid );
|
||||||
|
bool hostUtil_is_valid_ip_addr ( string ip );
|
||||||
|
bool hostUtil_is_valid_bm_type ( string bm_type );
|
||||||
|
|
||||||
|
int hostUtil_mktmpfile ( string hostname, string basename, string & filename, string data );
|
||||||
|
|
||||||
|
#endif
|
1065
mtce-common/cgts-mtce-common-1.0/common/httpUtil.cpp
Normal file
1065
mtce-common/cgts-mtce-common-1.0/common/httpUtil.cpp
Normal file
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user