packaging/google-guest-agent.spec (234 lines of code) (raw):

# Copyright 2018 Google LLC # 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 # https://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. # Don't build debuginfo packages. %define debug_package %{nil} # The only use for extra source is to build plugin manager. %if 0%{?has_extra_source} %define build_plugin_manager %{has_extra_source} %endif Name: google-guest-agent Epoch: 1 Version: %{_version} Release: g1%{?dist} Summary: Google Compute Engine guest agent. License: ASL 2.0 Url: https://cloud.google.com/compute/docs/images/guest-environment Source0: %{name}_%{version}.orig.tar.gz %if 0%{?build_plugin_manager} Source1: %{name}_extra-%{version}.orig.tar.gz %endif Requires: google-compute-engine-oslogin >= 1:20231003 BuildArch: %{_arch} %if ! 0%{?el6} BuildRequires: systemd %endif Obsoletes: python-google-compute-engine, python3-google-compute-engine %description Contains the Google guest agent binary. %prep %if 0%{?build_plugin_manager} %autosetup -a 1 %else %autosetup %endif %build for bin in google_guest_agent google_metadata_script_runner gce_workload_cert_refresh; do pushd "$bin" GOPATH=%{_gopath} CGO_ENABLED=0 %{_go} build -ldflags="-s -w -X main.version=%{_version}" -mod=readonly popd done # Build side-by-side both new agent (plugin manager) and legacy agent. %if 0%{?build_plugin_manager} pushd %{name}-extra-%{version}/ VERSION=%{version} make cmd/google_guest_agent/google_guest_agent VERSION=%{version} make cmd/ggactl/ggactl_plugin_cleanup VERSION=%{version} make cmd/google_guest_compat_manager/google_guest_compat_manager VERSION=%{version} make cmd/core_plugin/core_plugin VERSION=%{version} make cmd/gce_metadata_script_runner/gce_metadata_script_runner VERSION=%{version} make cmd/metadata_script_runner_compat/gce_compat_metadata_script_runner popd %endif %install install -d "%{buildroot}/%{_docdir}/%{name}" cp -r THIRD_PARTY_LICENSES "%buildroot/%_docdir/%name/THIRD_PARTY_LICENSES" install -d %{buildroot}%{_bindir} install -p -m 0755 google_guest_agent/google_guest_agent %{buildroot}%{_bindir}/google_guest_agent install -p -m 0755 google_metadata_script_runner/google_metadata_script_runner %{buildroot}%{_bindir}/google_metadata_script_runner install -p -m 0755 gce_workload_cert_refresh/gce_workload_cert_refresh %{buildroot}%{_bindir}/gce_workload_cert_refresh install -d %{buildroot}/usr/share/google-guest-agent install -p -m 0644 instance_configs.cfg %{buildroot}/usr/share/google-guest-agent/instance_configs.cfg # Compat agent, it will become google_guest_agent after the full package transition. %if 0%{?build_plugin_manager} install -d %{buildroot}%{_exec_prefix}/lib/google/guest_agent install -p -m 0755 %{name}-extra-%{version}/cmd/gce_metadata_script_runner/gce_metadata_script_runner %{buildroot}%{_bindir}/gce_metadata_script_runner install -p -m 0755 %{name}-extra-%{version}/cmd/google_guest_agent/google_guest_agent %{buildroot}%{_bindir}/google_guest_agent_manager install -p -m 0755 %{name}-extra-%{version}/cmd/ggactl/ggactl_plugin_cleanup %{buildroot}%{_bindir}/ggactl_plugin_cleanup install -p -m 0755 %{name}-extra-%{version}/cmd/google_guest_compat_manager/google_guest_compat_manager %{buildroot}%{_bindir}/google_guest_compat_manager install -p -m 0755 %{name}-extra-%{version}/cmd/core_plugin/core_plugin %{buildroot}%{_exec_prefix}/lib/google/guest_agent/core_plugin install -p -m 0755 %{name}-extra-%{version}/cmd/metadata_script_runner_compat/gce_compat_metadata_script_runner %{buildroot}%{_bindir}/gce_compat_metadata_script_runner %endif %if 0%{?el6} install -d %{buildroot}/etc/init install -p -m 0644 %{name}.conf %{buildroot}/etc/init/ install -p -m 0644 google-startup-scripts.conf %{buildroot}/etc/init/ install -p -m 0644 google-shutdown-scripts.conf %{buildroot}/etc/init/ %else install -d %{buildroot}%{_unitdir} install -d %{buildroot}%{_presetdir} install -p -m 0644 %{name}.service %{buildroot}%{_unitdir} %if 0%{?build_plugin_manager} install -p -m 0644 google-guest-agent-manager.service %{buildroot}%{_unitdir} install -p -m 0644 google-guest-compat-manager.service %{buildroot}%{_unitdir} %endif install -p -m 0644 google-startup-scripts.service %{buildroot}%{_unitdir} install -p -m 0644 google-shutdown-scripts.service %{buildroot}%{_unitdir} install -p -m 0644 gce-workload-cert-refresh.service %{buildroot}%{_unitdir} install -p -m 0644 gce-workload-cert-refresh.timer %{buildroot}%{_unitdir} install -p -m 0644 90-%{name}.preset %{buildroot}%{_presetdir}/90-%{name}.preset %endif %files %{_docdir}/%{name} %defattr(-,root,root,-) /usr/share/google-guest-agent/instance_configs.cfg %{_bindir}/google_guest_agent %if 0%{?build_plugin_manager} %{_bindir}/gce_metadata_script_runner %{_bindir}/google_guest_compat_manager %{_bindir}/gce_compat_metadata_script_runner %{_bindir}/google_guest_agent_manager %{_bindir}/ggactl_plugin_cleanup %{_exec_prefix}/lib/google/guest_agent/core_plugin %endif %{_bindir}/google_metadata_script_runner %{_bindir}/gce_workload_cert_refresh %if 0%{?el6} /etc/init/%{name}.conf /etc/init/google-startup-scripts.conf /etc/init/google-shutdown-scripts.conf %else %{_unitdir}/%{name}.service %if 0%{?build_plugin_manager} %{_unitdir}/google-guest-agent-manager.service %{_unitdir}/google-guest-compat-manager.service %endif %{_unitdir}/google-startup-scripts.service %{_unitdir}/google-shutdown-scripts.service %{_unitdir}/gce-workload-cert-refresh.service %{_unitdir}/gce-workload-cert-refresh.timer %{_presetdir}/90-%{name}.preset %endif %if ! 0%{?el6} %post if [ $1 -eq 1 ]; then # Initial installation # Install instance configs if not already present. if [ ! -f /etc/default/instance_configs.cfg ]; then cp -a /usr/share/google-guest-agent/instance_configs.cfg /etc/default/ fi # Use enable instead of preset because preset is not supported in # chroots. systemctl enable google-guest-agent.service >/dev/null 2>&1 || : systemctl enable google-startup-scripts.service >/dev/null 2>&1 || : systemctl enable google-shutdown-scripts.service >/dev/null 2>&1 || : systemctl enable gce-workload-cert-refresh.timer >/dev/null 2>&1 || : %if 0%{?build_plugin_manager} systemctl enable google-guest-compat-manager.service >/dev/null 2>&1 || : systemctl enable google-guest-agent-manager.service >/dev/null 2>&1 || : %endif if [ -d /run/systemd/system ]; then systemctl daemon-reload >/dev/null 2>&1 || : systemctl start google-guest-agent.service >/dev/null 2>&1 || : systemctl start gce-workload-cert-refresh.timer >/dev/null 2>&1 || : %if 0%{?build_plugin_manager} systemctl start google-guest-compat-manager.service >/dev/null 2>&1 || : systemctl start google-guest-agent-manager.service >/dev/null 2>&1 || : %endif fi else # Package upgrade %if 0%{?build_plugin_manager} systemctl enable google-guest-compat-manager.service >/dev/null 2>&1 || : systemctl enable google-guest-agent-manager.service >/dev/null 2>&1 || : %endif if [ -d /run/systemd/system ]; then systemctl daemon-reload >/dev/null 2>&1 || : systemctl try-restart google-guest-agent.service >/dev/null 2>&1 || : %if 0%{?build_plugin_manager} systemctl restart google-guest-compat-manager.service >/dev/null 2>&1 || : systemctl restart google-guest-agent-manager.service >/dev/null 2>&1 || : %endif fi # Re-enable the guest agent service if core plugin was enabled, since the # service would have been disabled, and stay disabled post-upgrade. if [ ! -f "/usr/bin/google_guest_compat_manager" ]; then if [ -f "/etc/google-guest-agent/core-plugin-enabled" ] && [ ! -z $(grep "true" "/etc/google-guest-agent/core-plugin-enabled") ]; then systemctl enable google-guest-agent.service > /dev/null 2>&1 || : systemctl enable gce-workload-cert-refresh.timer > /dev/null 2>&1 || : fi fi fi %preun if [ $1 -eq 0 ]; then # Package removal, not upgrade %if 0%{?build_plugin_manager} systemctl --no-reload disable google-guest-compat-manager.service >/dev/null 2>&1 || : systemctl --no-reload disable google-guest-agent-manager.service >/dev/null 2>&1 || : %endif systemctl --no-reload disable google-guest-agent.service >/dev/null 2>&1 || : systemctl --no-reload disable google-startup-scripts.service >/dev/null 2>&1 || : systemctl --no-reload disable google-shutdown-scripts.service >/dev/null 2>&1 || : systemctl --no-reload disable gce-workload-cert-refresh.timer >/dev/null 2>&1 || : if [ -d /run/systemd/system ]; then systemctl stop google-guest-agent.service >/dev/null 2>&1 || : %if 0%{?build_plugin_manager} systemctl stop google-guest-compat-manager.service >/dev/null 2>&1 || : systemctl stop google-guest-agent-manager.service >/dev/null 2>&1 || : ggactl_plugin_cleanup all >/dev/null 2>&1 || : %endif fi fi %postun if [ $1 -eq 0 ]; then # Package removal, not upgrade if [ -f /etc/default/instance_configs.cfg ]; then rm /etc/default/instance_configs.cfg fi if [ -d /run/systemd/system ]; then systemctl daemon-reload >/dev/null 2>&1 || : fi fi %else # EL6 %post if [ $1 -eq 1 ]; then # Install instance configs if not already present. if [ ! -f /etc/default/instance_configs.cfg ]; then cp -a /usr/share/google-guest-agent/instance_configs.cfg /etc/default/ fi # Initial installation initctl start google-guest-agent >/dev/null 2>&1 || : else # Upgrade initctl restart google-guest-agent >/dev/null 2>&1 || : fi %preun if [ $1 -eq 0 ]; then # Package removal, not upgrade initctl stop google-guest-agent >/dev/null 2>&1 || : fi %postun if [ $1 -eq 0 ]; then # Package removal, not upgrade if [ -f /etc/default/instance_configs.cfg ]; then rm /etc/default/instance_configs.cfg fi fi %endif