%global org_name manageiq %global product_name manageiq %global product_summary ManageIQ Management Engine %global product_url https://github.com/ManageIQ/manageiq %global app_root /var/www/miq/vmdb %global org_root /opt/%{org_name} %global appliance_root %{org_root}/%{name}-appliance %global gemset_root %{org_root}/%{name}-gemset %global manifest_root %{org_root}/manifest %global appliance_builddir %{name}-appliance-%{version} %global core_builddir %{name}-core-%{version} %global gemset_builddir %{name}-gemset-%{version} %global manifest_builddir %{name}-manifest-%{version} %global debug_package %{nil} %global __requires_exclude ^\/usr\/bin\/jruby Name: %{product_name} Version: 12.0.0 Release: 0.1.20201208150449%{?dist} Summary: %{product_summary} License: Apache-2.0 URL: %{product_url} Source0: %{name}-appliance-%{version}.tar.gz Source1: %{name}-core-%{version}.tar.gz Source2: %{name}-gemset-%{version}.tar.gz Source3: %{name}-manifest-%{version}.tar.gz %description %{product_summary} %prep %setup -q -n %{appliance_builddir} %setup -q -T -D -b 1 -n %{core_builddir} %setup -q -T -D -b 2 -n %{gemset_builddir} %setup -q -T -D -b 3 -n %{manifest_builddir} # buildsubdir is set to the last extracted archive (gemset), reset cd %{_builddir} pathfix.py -pni "%{__python3} %{py3_shbang_opts}" %{gemset_builddir} %build cd %{_builddir} cat <<"EOF" > %{gemset_builddir}/enable export APPLIANCE="true" export BUNDLE_GEMFILE=%{app_root}/Gemfile export GEM_HOME=%{gemset_root} export GEM_PATH=%{gemset_root}:$(gem env path) export PATH=%{gemset_root}/bin:$PATH EOF cat <<"EOF" > %{appliance_builddir}/LINK/etc/default/evm_production export APPLIANCE_SOURCE_DIRECTORY=%{appliance_root} export APPLIANCE_TEMPLATE_DIRECTORY=${APPLIANCE_SOURCE_DIRECTORY}/TEMPLATE source %{gemset_root}/enable EOF %install cd %{_builddir} ### from core %{__mkdir} -p %{buildroot}%{app_root} %{__cp} -r %{core_builddir}/* %{buildroot}%{app_root} ### from appliance %{__mkdir} -p %{buildroot}%{appliance_root} %{__cp} -r %{appliance_builddir}/* %{buildroot}%{appliance_root} %{__mkdir} -p %{buildroot}/etc/httpd/conf.d %{__mkdir} -p %{buildroot}%{app_root}/log/apache ### from gemset %{__mkdir} -p %{buildroot}%{gemset_root} %{__cp} -r %{gemset_builddir}/bin %{buildroot}%{gemset_root} %{__cp} -r %{gemset_builddir}/build_info %{buildroot}%{gemset_root} %{__cp} -r %{gemset_builddir}/bundler %{buildroot}%{gemset_root} %{__cp} -r %{gemset_builddir}/cache %{buildroot}%{gemset_root} %{__cp} -r %{gemset_builddir}/doc %{buildroot}%{gemset_root} %{__cp} -r %{gemset_builddir}/extensions %{buildroot}%{gemset_root} %{__cp} -r %{gemset_builddir}/gems %{buildroot}%{gemset_root} %{__cp} -r %{gemset_builddir}/specifications %{buildroot}%{gemset_root} %{__cp} -r %{gemset_builddir}/vmdb %{buildroot}%{gemset_root} install -m644 %{gemset_builddir}/enable %{buildroot}%{gemset_root} ### from manifest %{__mkdir} -p %{buildroot}%{manifest_root} %{__cp} -r %{manifest_builddir}/* %{buildroot}%{manifest_root} # Move webpack manifests %{__mv} %{buildroot}%{app_root}/public/packs/webpack_modules_manifest.json %{buildroot}%{manifest_root} %{__mv} %{buildroot}%{app_root}/public/packs/webpack_packages_manifest.json %{buildroot}%{manifest_root} %{__mv} %{buildroot}%{app_root}/public/ui/service/webpack_modules_manifest.json %{buildroot}%{manifest_root}/webpack_modules_manifest_service_ui.json %{__mv} %{buildroot}%{app_root}/public/ui/service/webpack_packages_manifest.json %{buildroot}%{manifest_root}/webpack_packages_manifest_service_ui.json ## from appliance #symlink some executables %{__mkdir} -p %{buildroot}/%{_bindir} pushd ./%{appliance_builddir}/LINK/usr/bin for filename in `ls`; do ln -s %{appliance_root}/LINK/usr/bin/$filename %{buildroot}/%{_bindir}/$filename done popd #symlink some configuration files pushd ./%{appliance_builddir}/LINK/etc for dirname in `ls`; do pushd ./$dirname %{__mkdir} -p %{buildroot}/%{_sysconfdir}/$dirname for filename in `ls`; do ln -s %{appliance_root}/LINK/etc/$dirname/$filename %{buildroot}/%{_sysconfdir}/$dirname/$filename done popd done popd %{__mkdir} -p %{buildroot}/root pushd ./%{appliance_builddir}/LINK/root ln -s %{appliance_root}/LINK/root/.ansible.cfg %{buildroot}/root/.ansible.cfg popd pushd ./%{appliance_builddir}/LINK ln -s %{appliance_root}/LINK/.toprc %{buildroot}/.toprc popd #copy all files/directories below COPY %{__cp} -r ./%{appliance_builddir}/COPY/* %{buildroot}/ %clean rm -rf $RPM_BUILD_ROOT %package appliance Summary: %{product_summary} Appliance Requires: %{name}-system = %{version}-%{release} Requires: %{name}-ui = %{version}-%{release} Requires: postgresql-server Requires: repmgr10 >= 4.0.6 Requires: lvm2 Requires: memcached # NTP Requires: chrony # External Authentication Requires: sssd >= 1.11.6 Requires: sssd-dbus >= 1.11.6 # External Authentication - IPA Requires: c-ares >= 1.7.0 Requires: ipa-admintools >= 3.0.0 Requires: ipa-client >= 3.0.0 Requires: mod_intercept_form_submit >= 0.9.7 Requires: mod_auth_gssapi Requires: mod_authnz_pam >= 0.9.2 Requires: mod_lookup_identity >= 0.9.2 Requires: mod_ssl # External Authentication - Active Directory Requires: adcli Requires: oddjob Requires: oddjob-mkhomedir Requires: realmd Requires: samba-common Requires: samba-common-tools # External Authentication - SAML Requires: mod_auth_mellon # External Authentication - OpenID-Connect Requires: mod_auth_openidc # SCAP Requires: openscap Requires: scap-security-guide # Software Update Requires: yum-utils %description appliance %{product_summary} Appliance %pretrans appliance -p if posix.access('/bin/evmserver.sh', 'x') then local pid = posix.fork () if ( pid == -1 ) then print ("The fork failed.") elseif ( pid == 0 ) then posix.exec('/bin/evmserver.sh', 'update_stop') else posix.wait(pid) end end %posttrans appliance -p if posix.access('/bin/evmserver.sh', 'x') then local pid = posix.fork () if ( pid == -1 ) then print ("The fork failed.") elseif ( pid == 0 ) then posix.exec('/bin/evmserver.sh', 'update_start') else posix.wait(pid) end end %post appliance #motd is owned by system %{__cp} -f %{_sysconfdir}/motd.manageiq %{_sysconfdir}/motd systemctl daemon-reload # Note, the last command from a scriplet sets the exit status # for the scriplet so we can't one-line this. We also want # a failure in the restart to fail the scriplet/rpm install. if systemctl is-active --quiet evm-failover-monitor; then systemctl restart evm-failover-monitor fi %files appliance %defattr(-,root,root,775) %{_sysconfdir}/httpd/conf.d/manageiq-* %{_sysconfdir}/motd.manageiq %package appliance-tools Summary: %{product_summary} Appliance Tools Requires: less Requires: nano Requires: smem Requires: tree Requires: unzip Requires: vim-enhanced Requires: wget %description appliance-tools %{product_summary} Appliance Tools %files appliance-tools %package core Summary: %{product_summary} Core Requires: ruby Requires: %{name}-gemset = %{version}-%{release} Requires: ansible Requires: ansible-runner Requires: cockpit Requires: cockpit-ssh Requires: cockpit-ws Requires: git Requires: net-snmp Requires: net-snmp-libs Requires: net-snmp-utils Requires: socat %description core %{product_summary} Core %posttrans core # 'bin' needs to be copied, not symlinked [[ -e /var/www/miq/vmdb/bin ]] && rm -rf /var/www/miq/vmdb/bin cp -r %{gemset_root}/vmdb/bin /var/www/miq/vmdb/bin files=".bundle Gemfile.lock" for file in ${files} do [[ -e /var/www/miq/vmdb/${file} ]] && rm -rf /var/www/miq/vmdb/${file} ln -s %{gemset_root}/vmdb/${file} /var/www/miq/vmdb/${file} done %post core %{__cp} -f %{app_root}/config/cable.yml.sample %{app_root}/config/cable.yml %files core %defattr(-,root,root,775) %{app_root} %config(noreplace) %{app_root}/certs %exclude %{app_root}/public/assets %exclude %{app_root}/public/packs %exclude %{app_root}/public/ui %package gemset Summary: %{product_summary} Gemset BuildRequires: /usr/bin/pathfix.py Requires: cifs-utils Requires: libpq Requires: libcurl Requires: libssh2 Requires: libxml2 Requires: libxslt Requires: nfs-utils Requires: openscap-scanner Requires: openssl Requires: nodejs Requires: sqlite %ifarch x86_64 Requires: wmi %endif # For Miq IPMI (gems-pending) Requires: OpenIPMI Requires: freeipmi Requires: ipmitool # For Lenovo Requires: python3-pylxca # For Nuage Requires: cyrus-sasl Requires: cyrus-sasl-plain Requires: python3-vspk Requires: qpid-proton-c # For RHV Requires: ovirt-ansible-collection # For IMS Requires: v2v-conversion-host-ansible # For Appliance Console Requires: libsodium-devel Requires: network-scripts %description gemset %{product_summary} Gemset %files gemset %defattr(-,root,root,775) %dir %{gemset_root} %{gemset_root}/bin %{gemset_root}/build_info %{gemset_root}/bundler %{gemset_root}/cache %{gemset_root}/doc %{gemset_root}/extensions %{gemset_root}/gems %{gemset_root}/specifications %{gemset_root}/vmdb %{gemset_root}/enable %{manifest_root}/gem_manifest.csv %package pods Summary: %{product_summary} Pods Requires: %{name}-system = %{version}-%{release} Requires: %{name}-core = %{version}-%{release} Requires: glibc-langpack-en Requires: procps-ng %description pods %{product_summary} Pods %files pods %package system Summary: %{product_summary} System Requires: hostname Requires: iproute Requires: nmap-ncat # For Email Requires: postfix # For log rotate Requires: cronie Requires: logrotate # External Authentication - LDAP Requires: openldap-clients %description system %{product_summary} System %files system %defattr(-,root,root,775) /.toprc /root/.ansible.cfg %{appliance_root} %{app_root}/log/apache %dir %{manifest_root} %{_bindir}/cloud_ds_check.sh %{_bindir}/cockpit-auth-miq %{_bindir}/evm* %{_bindir}/fix_auth %{_bindir}/generate_miq_server_cert.sh %{_bindir}/generate_rpm_manifest.sh %{_bindir}/miq* %{_bindir}/normalize_userid_to_upn %{_bindir}/pg_inspector_server.sh %{_prefix}/lib/systemd/system/cloud-ds-check.service %{_prefix}/lib/systemd/system/evm* %{_prefix}/lib/systemd/system/miq* %{_sbindir}/ifup-local %{_sysconfdir}/cloud/cloud.cfg.d/10_miq_*.cfg %{_sysconfdir}/cron.hourly/miq* %{_sysconfdir}/cron.hourly/pg-inpsector-server-hourly.cron %{_sysconfdir}/default/evm* %{_sysconfdir}/issue.template %{_sysconfdir}/logrotate.d/miq_logs.conf %{_sysconfdir}/manageiq/postgresql.conf.d/01_miq_overrides.conf %{_sysconfdir}/profile.d/evm.sh %{_sysconfdir}/sudoers.d/repmgr %package ui Summary: %{product_summary} UI Requires: %{name}-core = %{version}-%{release} Requires: httpd %description ui %{product_summary} UI %files ui %defattr(-,root,root,775) %{app_root}/public/assets %{app_root}/public/packs %{app_root}/public/ui %{manifest_root}/npm_manifest.csv %{manifest_root}/webpack_modules_manifest.json %{manifest_root}/webpack_packages_manifest.json %{manifest_root}/webpack_modules_manifest_service_ui.json %{manifest_root}/webpack_packages_manifest_service_ui.json %config(noreplace) %{app_root}/public/custom.css %changelog * Tue Oct 27 2020 Satoe Imaishi - 12.0.0-1 - master branch build