# Hello packaging friend! # # If you find yourself using this 'fpm --edit' feature frequently, it is # a sign that fpm is missing a feature! I welcome your feature requests! # Please visit the following URL and ask for a feature that helps you never # need to edit this file again! :) # https://github.com/jordansissel/fpm/issues # ------------------------------------------------------------------------ # Disable the stupid stuff rpm distros include in the build process by default: # Disable any prep shell actions. replace them with simply 'true' %define __spec_prep_post true %define __spec_prep_pre true # Disable any build shell actions. replace them with simply 'true' %define __spec_build_post true %define __spec_build_pre true # Disable any install shell actions. replace them with simply 'true' %define __spec_install_post true %define __spec_install_pre true # Disable any clean shell actions. replace them with simply 'true' %define __spec_clean_post true %define __spec_clean_pre true # Disable checking for unpackaged files ? #%undefine __check_files # Allow building noarch packages that contain binaries %define _binaries_in_noarch_packages_terminate_build 0 # Use md5 file digest method. # The first macro is the one used in RPM v4.9.1.1 %define _binary_filedigest_algorithm 1 # This is the macro I find on OSX when Homebrew provides rpmbuild (rpm v5.4.14) %define _build_binary_file_digest_algo 1 # Use gzip payload compression %define _binary_payload w9.gzdio Name: one-context Version: 6.6.0 Release: 1.el9 Summary: OpenNebula Contextualization Package AutoReqProv: no # Seems specifying BuildRoot is required on older rpmbuild (like on CentOS 5) # fpm passes '--define buildroot ...' on the commandline, so just reuse that. BuildRoot: %buildroot Prefix: / Group: default License: Apache 2.0 Vendor: OpenNebula Systems URL: http://opennebula.org Packager: OpenNebula Systems Requires: util-linux Requires: bash Requires: curl Requires: bind-utils Requires: cloud-utils-growpart Requires: parted Requires: ruby Requires: rubygem-json Requires: sudo Requires: shadow-utils Requires: openssh-server Requires: qemu-guest-agent Requires: gawk Requires: virt-what Recommends:open-vm-tools Conflicts: cloud-init Conflicts: one-context-ec2 Obsoletes: cloud-init %description . Contextualization tools for the virtual machine running in the OpenNebula cloud. Based on parameters provided by the cloud controller configures the networking, initial user password, SSH keys, runs custom start scripts, resizes the root filesystem, and provides tools to communicate with OneGate service. . Check the OpenNebula web page (http://opennebula.org) to get the support. %prep # noop %build # noop %install # noop %clean # noop %post upgrade() { : #!/usr/bin/env bash # Reload udev rules udevadm control --reload >/dev/null 2>&1 || : ### Enable services ######################################## SERVICES=${SERVICES:-one-context-local one-context-online one-context} TIMERS=${TIMERS:-one-context-reconfigure.timer} if which systemctl >/dev/null 2>&1 && \ [ -d /etc/systemd ] && \ [ -f /usr/lib/systemd/system/one-context.service ]; then systemctl daemon-reload >/dev/null 2>&1 || : for S in ${SERVICES} ${TIMERS}; do systemctl enable "${S}" >/dev/null 2>&1 done fi if which chkconfig >/dev/null 2>&1; then for S in ${SERVICES}; do chkconfig --add "${S}" >/dev/null 2>&1 done # EL6: refresh initramfs via dracut for growroot module if [ -f /usr/share/dracut/modules.d/50growroot/install ]; then for I in $(find /boot -name 'initramfs-*.img'); do KERNEL_VERS=$(echo "${I}" | sed -e 's/.*initramfs-\(.*\)\.img/\1/') dracut -f "${I}" "${KERNEL_VERS}" || : done fi elif which update-rc.d >/dev/null 2>&1; then for S in ${SERVICES}; do update-rc.d "${S}" enable >/dev/null 2>&1 update-rc.d "${S}" defaults >/dev/null 2>&1 done elif which rc-update >/dev/null 2>&1; then for S in ${SERVICES}; do rc-update add "${S}" boot >/dev/null 2>&1 done # Add crontab action for 1min schedules if ! crontab -l -u root | grep -qF '/etc/periodic/1min'; then ( crontab -l -u root echo -e '\n# Added by one-context' echo -e '* * * * * run-parts /etc/periodic/1min' ) | crontab -u root - fi # When existing file is changed, the new one might be created with # .apk-new suffix. Such files need to be processed by update-conf. if update-conf -al 2>/dev/null | grep -q context; then echo 'WARNING: Run update-conf to process any updated one-context files in /etc!' >&2 fi elif [ -x /bin/freebsd-version ]; then : else echo 'WARNING: Contextualization service not enabled automatically' >&2 fi } _install() { : #!/usr/bin/env bash SERVICES=${SERVICES:-one-context-local one-context-online one-context} TIMERS=${TIMERS:-one-context-reconfigure.timer} rm -f /etc/udev/rules.d/70-persistent-cd.rules rm -f /etc/udev/rules.d/70-persistent-net.rules # Reload udev rules udevadm control --reload >/dev/null 2>&1 || : ### Enable services ######################################## if which systemctl >/dev/null 2>&1 && \ [ -d /etc/systemd ] && \ [ -f /usr/lib/systemd/system/one-context.service ]; then systemctl daemon-reload >/dev/null 2>&1 || : for S in ${SERVICES} ${TIMERS}; do systemctl enable "${S}" >/dev/null 2>&1 done fi if which chkconfig >/dev/null 2>&1; then for S in ${SERVICES}; do chkconfig --add "${S}" >/dev/null 2>&1 done # EL6: refresh initramfs via dracut for growroot module if [ -f /usr/share/dracut/modules.d/50growroot/install ]; then for I in $(find /boot -name 'initramfs-*.img'); do KERNEL_VERS=$(echo "${I}" | sed -e 's/.*initramfs-\(.*\)\.img/\1/') dracut -f "${I}" "${KERNEL_VERS}" || : done fi elif which update-rc.d >/dev/null 2>&1; then for S in ${SERVICES}; do update-rc.d "${S}" enable >/dev/null 2>&1 update-rc.d "${S}" defaults >/dev/null 2>&1 done elif which rc-update >/dev/null 2>&1; then for S in ${SERVICES}; do rc-update add "${S}" boot >/dev/null 2>&1 done # Add crontab action for 1min schedules if ! crontab -l -u root | grep -qF '/etc/periodic/1min'; then ( crontab -l -u root echo -e '\n# Added by one-context' echo -e '* * * * * run-parts /etc/periodic/1min' ) | crontab -u root - fi # When existing file is changed, the new one might be created with # .apk-new suffix. Such files need to be processed by update-conf. if update-conf -al 2>/dev/null | grep -q context; then echo 'WARNING: Run update-conf to process any updated one-context files in /etc!' >&2 fi elif [ -x /bin/freebsd-version ]; then : else echo 'WARNING: Contextualization service not enabled automatically' >&2 fi ### Cleanup network configuration ########################## if [ -f /etc/sysctl.d/50-one-context.conf ]; then rm -f /etc/sysctl.d/50-one-context.conf fi # Debian based distros if [ -d /etc/network ]; then # Prepare network files cp /etc/network/interfaces "/etc/network/interfaces.$(date '+%s')" rm -rf /etc/network/interfaces.d cat > /etc/network/interfaces <> /etc/default/networking # fi # fi fi # Red Hat based distros if [ -d /etc/sysconfig/network-scripts/ ]; then # Prepare network files find /etc/sysconfig/network-scripts -type f \ \( -name 'ifcfg-*' -o -name 'route-*' -o -name 'route6-*' \) \ ! -name 'ifcfg-lo' ! -name 'route-lo' ! -name 'route6-lo' \ -exec rm -f {} \; fi # openSUSE based distros if [ -d /etc/sysconfig/network/ ]; then # Prepare network files find /etc/sysconfig/network -type f \ \( -name 'ifcfg-*' -o -name 'ifroute-*' -o -name 'ifsysctl-*' \) \ ! -name 'ifcfg-lo' ! -name 'ifroute-lo' ! -name 'ifsysctl-lo' \ -exec rm -f {} \; rm -f /etc/sysconfig/network/routes /etc/sysconfig/network/ifsysctl sed -i '/^NETCONFIG_DNS_STATIC_SERVERS=/ s/=.*$/=""/' /etc/sysconfig/network/config sed -i '/^NETCONFIG_DNS_STATIC_SEARCHLIST=/ s/=.*$/=""/' /etc/sysconfig/network/config fi # Netplan if [ -d /etc/netplan/ ]; then rm -f /etc/netplan/* fi # NetworkManager if [ -d /etc/NetworkManager/system-connections/ ]; then rm -f /etc/NetworkManager/system-connections/* fi # systemd-networkd if [ -d /etc/systemd/network/ ]; then rm -f \ /etc/systemd/networkd/*.network \ /etc/systemd/networkd/*.link fi # FreeBSD based distros #TODO: pfsense paths? if [ -x /bin/freebsd-version ]; then rm -f /etc/rc.conf.d/network /etc/rc.conf.d/routing if [ -f /etc/rc.conf ]; then sed -i '' \ -e '/^ifconfig_/d' \ -e '/^route_/d' \ -e '/^static_routes/d' \ -e '/^defaultrouter/d' \ /etc/rc.conf fi fi } if [ "${1}" -eq 1 ] then # "after install" goes here _install elif [ "${1}" -gt 1 ] then # "after upgrade" goes here upgrade fi %preun if [ "${1}" -eq 0 ] then : #!/usr/bin/env bash SERVICES=${SERVICES:-one-context one-context-online one-context-local one-context-reconfigure one-context-reconfigure-delayed} TIMERS=${TIMERS:-one-context-reconfigure.timer} # Disable services if which systemctl >/dev/null 2>&1 && [ -d /etc/systemd ]; then for S in ${TIMERS} ${SERVICES}; do systemctl --no-reload disable "${S}" >/dev/null 2>&1 || : systemctl stop "${S}" >/dev/null 2>&1 || : done fi if which chkconfig >/dev/null 2>&1; then for S in ${SERVICES}; do chkconfig --del "${S}" >/dev/null 2>&1 || : done elif which update-rc.d >/dev/null 2>&1; then for S in ${SERVICES}; do update-rc.d -f "${S}" remove >/dev/null 2>&1 || : done elif which rc-update >/dev/null 2>&1; then for S in ${SERVICES}; do rc-update del "${S}" boot >/dev/null 2>&1 || : done fi fi %postun if [ "${1}" -eq 0 ] then : #!/usr/bin/env bash udevadm control --reload >/dev/null 2>&1 || : if which systemctl >/dev/null 2>&1 && [ -d /etc/systemd ]; then systemctl daemon-reload >/dev/null 2>&1 || : fi fi %files %defattr(-,root,root,-) %config(noreplace) /etc/NetworkManager/conf.d/10-globally-managed-devices.conf %config(noreplace) /etc/NetworkManager/conf.d/one-context.conf %config(noreplace) /etc/udev/rules.d/75-cd-aliases-generator.rules %config(noreplace) /etc/udev/rules.d/75-persistent-net-generator.rules %dir /etc/one-context.d %dir /etc/one-context.d/loc-10-network.d # Reject config files already listed or parent directories, then prefix files # with "/", then make sure paths with spaces are quoted. I hate rpm so much. /etc/one-context.d/loc-04-run-dir /etc/one-context.d/loc-05-grow-rootfs /etc/one-context.d/loc-09-timezone /etc/one-context.d/loc-10-network /etc/one-context.d/loc-10-network-pci /etc/one-context.d/loc-10-network.d/functions /etc/one-context.d/loc-10-network.d/netcfg-bsd /etc/one-context.d/loc-10-network.d/netcfg-interfaces /etc/one-context.d/loc-10-network.d/netcfg-netplan /etc/one-context.d/loc-10-network.d/netcfg-networkd /etc/one-context.d/loc-10-network.d/netcfg-nm /etc/one-context.d/loc-10-network.d/netcfg-scripts /etc/one-context.d/loc-14-mount-swap /etc/one-context.d/loc-16-gen-env /etc/one-context.d/loc-20-set-username-password /etc/one-context.d/loc-22-ssh_public_key /etc/one-context.d/loc-30-console /etc/one-context.d/loc-35-securetty /etc/one-context.d/net-15-hostname /etc/one-context.d/net-97-start-script /etc/one-context.d/net-98-execute-scripts /etc/one-context.d/net-99-report-ready /lib/udev/rules.d/65-context.rules /usr/bin/onegate /usr/bin/onegate.rb /usr/lib/systemd/system/one-context-force.service /usr/lib/systemd/system/one-context-local.service /usr/lib/systemd/system/one-context-online.service /usr/lib/systemd/system/one-context-reconfigure-delayed.service /usr/lib/systemd/system/one-context-reconfigure.service /usr/lib/systemd/system/one-context-reconfigure.timer /usr/lib/systemd/system/one-context.service /usr/sbin/one-context-run /usr/sbin/one-contextd /usr/sbin/onesysprep %changelog