| | |
| | | |
| | | # |
| | | # Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. |
| | | # Copyright (c) 2020, Adam Stevko |
| | | # |
| | | SUDO = /usr/bin/sudo |
| | | |
| | | PFEXEC = /usr/bin/pfexec |
| | | |
| | | ZONE = $(WS_TOOLS)/userland-zone |
| | | |
| | | define separator-line |
| | | @$(PYTHON) -c 'l="="*(40-len("$1")/2); print("%s%s%s" % (l, "$1", l))' |
| | | @$(PYTHON) -c 'l="="*int(40-len("$1")/2); print("%s%s%s" % (l, "$1", l))' |
| | | endef |
| | | |
| | | component-environment-check:: |
| | | $(call separator-line,Workspace) |
| | | @echo " Path: $(WS_TOP)" |
| | | @echo " Branch: $$(hg identify -b)" |
| | | @echo " Changeset: $$(hg identify -n)($$(hg identify -i))" |
| | | @echo " Branch: $$(git rev-parse --abbrev-ref HEAD)" |
| | | @echo " Changeset: $$(git rev-parse HEAD)" |
| | | $(call separator-line,System) |
| | | @/usr/bin/uname -a |
| | | @echo "Zone: $$(/usr/sbin/zonename)" |
| | | @echo "Zone: $$(/usr/bin/zonename)" |
| | | @echo "Zone IP type: $$(/usr/bin/zonename -t)" |
| | | @/usr/sbin/psrinfo -vp |
| | | @/usr/sbin/ipadm show-addr |
| | | $(call separator-line,Required Packages) |
| | | @/usr/bin/pkg list -vH $(REQUIRED_PACKAGES:%=/%) |
| | | @/usr/bin/pkg list -vH $(USERLAND_REQUIRED_PACKAGES:%=/%) $(REQUIRED_PACKAGES:%=/%) |
| | | $(call separator-line) |
| | | |
| | | component-environment-prep:: |
| | | @echo "Adding required packages to build environment..." |
| | | @-echo $(REQUIRED_PACKAGES:%=/%) | xargs \ |
| | | $(SUDO) /usr/bin/pkg install --accept -v |
| | | @/usr/bin/pkg list -vH $(USERLAND_REQUIRED_PACKAGES:%=/%) $(REQUIRED_PACKAGES:%=/%) >/dev/null || \ |
| | | { echo "Adding required packages to build environment..."; \ |
| | | while true ; do \ |
| | | $(PFEXEC) /usr/bin/pkg install --accept -v $(USERLAND_REQUIRED_PACKAGES:%=/%) $(REQUIRED_PACKAGES:%=/%) ; \ |
| | | RETVAL=$$? ; \ |
| | | [ $$RETVAL -eq 0 ] && break; \ |
| | | [ $$RETVAL -eq 4 ] && break; \ |
| | | [ $$RETVAL -ne 7 ] && echo "pkg install returned $$RETVAL" && exit 1; \ |
| | | sleep 10; \ |
| | | done; } |
| | | |
| | | component-test-environment-check:: component-environment-check |
| | | $(call separator-line,Required Additional Packages Needed for Testing Only) |
| | | @[ -z "$(strip $(USERLAND_TEST_REQUIRED_PACKAGES))$(strip $(TEST_REQUIRED_PACKAGES))" ] || \ |
| | | /usr/bin/pkg list -vH $(USERLAND_TEST_REQUIRED_PACKAGES:%=/%) $(TEST_REQUIRED_PACKAGES:%=/%) |
| | | @C=0 ; \ |
| | | for p in $(TEST_CONFLICTING_PACKAGES) ; do \ |
| | | /usr/bin/pkg list -q /$$p && echo "Conflicting package $$p found" && C=1 ; \ |
| | | done ; \ |
| | | exit $$C |
| | | $(call separator-line) |
| | | |
| | | # |
| | | # For building in a constructed zone. Currently this assumes a template zone |
| | | # with /ws (tools mountpoint) and /builds (workspace mountpoint) mounted |
| | | # in the same place as in the global zone. It also assumes the current |
| | | # $USER account is replicated in the template zone. |
| | | # |
| | | ZONENAME=bz-$(shell echo "$(WS_TOP)" | md5sum | cut -c0-7)-$(COMPONENT_NAME) |
| | | component-test-environment-prep:: |
| | | @[ -z "$(strip $(USERLAND_TEST_REQUIRED_PACKAGES))$(strip $(TEST_REQUIRED_PACKAGES))" ] || \ |
| | | /usr/bin/pkg list -vH $(USERLAND_TEST_REQUIRED_PACKAGES:%=/%) $(TEST_REQUIRED_PACKAGES:%=/%) >/dev/null || \ |
| | | { echo "Adding required packages to testing environment..."; \ |
| | | while true ; do \ |
| | | $(PFEXEC) /usr/bin/pkg install --accept -v $(USERLAND_TEST_REQUIRED_PACKAGES:%=/%) $(TEST_REQUIRED_PACKAGES:%=/%) ; \ |
| | | RETVAL=$$? ; \ |
| | | [ $$RETVAL -eq 0 ] && break; \ |
| | | [ $$RETVAL -eq 4 ] && break; \ |
| | | [ $$RETVAL -ne 7 ] && echo "pkg install returned $$RETVAL" && exit 1; \ |
| | | sleep 10; \ |
| | | done; } |
| | | @for p in $(TEST_CONFLICTING_PACKAGES) ; do \ |
| | | /usr/bin/pkg list -q /$$p || continue ; \ |
| | | echo "Removing conflicting packages from testing environment..." ; \ |
| | | while true ; do \ |
| | | $(PFEXEC) /usr/bin/pkg uninstall -v --deny-new-be --ignore-missing $(TEST_CONFLICTING_PACKAGES:%=/%) ; \ |
| | | RETVAL=$$? ; \ |
| | | [ $$RETVAL -eq 0 ] && exit 0 ; \ |
| | | [ $$RETVAL -ne 7 ] && echo "pkg uninstall returned $$RETVAL" && exit 1 ; \ |
| | | sleep 10 ; \ |
| | | done ; \ |
| | | done |
| | | |
| | | $(BUILD_DIR)/packages.xml: Makefile $(BUILD_DIR) |
| | | @echo "$(REQUIRED_PACKAGES:%=\t\t<name>pkg:/%</name>\n)" >$(@) |
| | | ZONENAME_PREFIX = bz |
| | | ZONENAME_ID = $(shell echo "$(WS_TOP)" | sha1sum | cut -c0-7)-$(COMPONENT_NAME) |
| | | ZONENAME = $(ZONENAME_PREFIX)-$(ZONENAME_ID) |
| | | |
| | | $(BUILD_DIR)/ai_manifest.xml: $(WS_TOOLS)/zone_default.xml $(BUILD_DIR) |
| | | $(CP) $< $(@) |
| | | component-zone-template: |
| | | $(call separator-line) |
| | | $(call separator-line,Create template zone) |
| | | USER_ID=$$(id -u) && \ |
| | | $(PFEXEC) $(ZONE) --prefix $(ZONENAME_PREFIX) create-template -u $${USER} -i $${USER_ID} |
| | | |
| | | $(BUILD_DIR)/sc_profile.xml: $(WS_TOOLS)/sc_profile.xml $(BUILD_DIR) |
| | | $(GSED) -e "s/XXX_USER_XXX/$${USER}/g" -e "s/XXX_UID_XXX/$$(id -u)/g" $< >$(@) |
| | | |
| | | component-zone-build: $(BUILD_DIR)/ai_manifest.xml $(BUILD_DIR)/packages.xml \ |
| | | $(BUILD_DIR)/sc_profile.xml download |
| | | component-zone-build: |
| | | $(call separator-line) |
| | | $(call separator-line,Create $(ZONENAME)) |
| | | $(SUDO) /usr/sbin/zonecfg -z $(ZONENAME) create -t template |
| | | #@$(SUDO) /usr/sbin/zoneadm -z $(ZONENAME) clone template |
| | | $(SUDO) /usr/sbin/zoneadm -z $(ZONENAME) install \ |
| | | -m $(BUILD_DIR)/ai_manifest.xml \ |
| | | -c $(BUILD_DIR)/sc_profile.xml |
| | | $(PFEXEC) $(ZONE) --prefix $(ZONENAME_PREFIX) spawn-zone --id $(ZONENAME_ID) |
| | | $(call separator-line,Boot $(ZONENAME)) |
| | | $(SUDO) /usr/sbin/zoneadm -z $(ZONENAME) boot |
| | | @while $$(true) ; do \ |
| | | echo "waiting for zone ..." ; \ |
| | | $(SUDO) /usr/sbin/zlogin -l $${USER} $(ZONENAME) \ |
| | | /bin/true >/dev/null 2>&1 && break ; \ |
| | | sleep 10 ; \ |
| | | @while $$(true); do \ |
| | | echo "Waiting for zone $(ZONENAME) to boot..."; \ |
| | | $(PFEXEC) /usr/sbin/zlogin -l $${USER} $(ZONENAME) \ |
| | | /bin/true >/dev/null 2>&1 && break; \ |
| | | sleep 10; \ |
| | | done |
| | | #$(call separator-line,Prep $(ZONENAME)) |
| | | #@$(SUDO) /usr/sbin/zlogin -S $(ZONENAME) \ |
| | | # "cd $(COMPONENT_DIR) ; gmake component-be-prep" |
| | | # FIXME: |
| | | # - remove once we figure out a better way how to enable zoneproxy-client inside the nlipkg brand |
| | | @while $$(true); do \ |
| | | echo "Waiting for $(ZONENAME) config repository.."; \ |
| | | $(PFEXEC) /usr/bin/svcs -z $(ZONENAME) -a >/dev/null 2>&1 && break; \ |
| | | sleep 10; \ |
| | | done |
| | | # We need to create door inside after zone-proxy-client is running |
| | | $(call separator-line,Configure IPS for $(ZONENAME)) |
| | | $(PFEXEC) /usr/lib/zones/zoneproxy-adm $(ZONENAME) |
| | | @while $$(true); do \ |
| | | echo "Waiting for zoneproxyd to be ready.."; \ |
| | | PROXY_PID=$$(/usr/bin/svcs -p svc:/application/pkg/zones-proxyd:default | \ |
| | | nawk '$$0 ~ /zoneproxyd/ {print $$2}') && \ |
| | | $(PFEXEC) /usr/bin/pfiles $${PROXY_PID} | \ |
| | | $(GNU_GREP) $(ZONENAME) >/dev/null 2>&1 && break; \ |
| | | sleep 10; \ |
| | | done |
| | | $(PFEXEC) /usr/sbin/svcadm -z $(ZONENAME) \ |
| | | enable svc:/application/pkg/zones-proxy-client:default |
| | | ZONEROOT="$$(/usr/sbin/zoneadm -z $(ZONENAME) list -p | cut -d: -f4)/root" && \ |
| | | $(PFEXEC) /usr/bin/pkg -R $${ZONEROOT} set-property use-system-repo True && \ |
| | | while $$(true); do \ |
| | | echo "Waiting for sysrepo to be ready..." && \ |
| | | $(PFEXEC) /usr/bin/pkg -R $${ZONEROOT} publisher | \ |
| | | $(GNU_GREP) syspub >/dev/null 2>&1 && break; \ |
| | | sleep 10; \ |
| | | done |
| | | $(call separator-line,Build in $(ZONENAME)) |
| | | $(SUDO) /usr/sbin/zlogin -l $${USER} $(ZONENAME) \ |
| | | "cd $(COMPONENT_DIR) ; gmake component-be-check install" |
| | | # "cd $(COMPONENT_DIR) ; gmake component-be-check publish PKGLINT=/bin/true" |
| | | $(call separator-line,Halt $(ZONENAME)) |
| | | $(SUDO) /usr/sbin/zoneadm -z $(ZONENAME) halt |
| | | $(SUDO) /usr/sbin/zoneadm -z $(ZONENAME) uninstall -F |
| | | $(SUDO) /usr/sbin/zonecfg -z $(ZONENAME) delete -F |
| | | $(PFEXEC) /usr/sbin/zlogin -l $${USER} $(ZONENAME) \ |
| | | "cd $(COMPONENT_DIR); gmake install" |
| | | $(call separator-line) |
| | | |
| | | component-zone-cleanup:: |
| | | -$(SUDO) /usr/sbin/zoneadm -z $(ZONENAME) halt |
| | | -$(SUDO) /usr/sbin/zoneadm -z $(ZONENAME) uninstall -F |
| | | -$(SUDO) /usr/sbin/zonecfg -z $(ZONENAME) delete -F |
| | | component-zone-cleanup: |
| | | $(PFEXEC) $(ZONE) destroy-zone --id $(ZONENAME_ID) |
| | | |
| | | # Short aliases for user convenience |
| | | env-check:: component-environment-check |
| | | env-prep:: component-environment-prep |
| | | test-env-check:: component-test-environment-check |
| | | test-env-prep:: component-test-environment-prep |