fritzkink
2023-12-15 9329acaef0fff79c242edf766ac84544d6422be8
commit | author | age
d180f2 1 #
2 # CDDL HEADER START
3 #
4 # The contents of this file are subject to the terms of the
5 # Common Development and Distribution License (the "License").
6 # You may not use this file except in compliance with the License.
7 #
8 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 # or http://www.opensolaris.org/os/licensing.
10 # See the License for the specific language governing permissions
11 # and limitations under the License.
12 #
13 # When distributing Covered Code, include this CDDL HEADER in each
14 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 # If applicable, add the following below this CDDL HEADER, with the
16 # fields enclosed by brackets "[]" replaced with your own identifying
17 # information: Portions Copyright [yyyy] [name of copyright owner]
18 #
19 # CDDL HEADER END
20 #
21
22 #
23 # Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
bf604a 24 # Copyright (c) 2020, Adam Stevko
d180f2 25 #
bf604a 26
27 PFEXEC =    /usr/bin/pfexec
28
29 ZONE =    $(WS_TOOLS)/userland-zone
d180f2 30
31 define separator-line
bf604a 32        @$(PYTHON) -c 'l="="*int(40-len("$1")/2); print("%s%s%s" % (l, "$1", l))'
d180f2 33 endef
34
35 component-environment-check::
36     $(call separator-line,Workspace)
37     @echo " Path:        $(WS_TOP)"
4d720d 38     @echo " Branch:      $$(git rev-parse --abbrev-ref HEAD)"
39     @echo " Changeset:   $$(git rev-parse HEAD)"
d180f2 40     $(call separator-line,System)
41     @/usr/bin/uname -a
4d720d 42     @echo "Zone: $$(/usr/bin/zonename)"
43     @echo "Zone IP type: $$(/usr/bin/zonename -t)"
d180f2 44     @/usr/sbin/psrinfo -vp
45     @/usr/sbin/ipadm show-addr
46     $(call separator-line,Required Packages)
1349f8 47     @/usr/bin/pkg list -vH $(USERLAND_REQUIRED_PACKAGES:%=/%) $(REQUIRED_PACKAGES:%=/%)
d180f2 48     $(call separator-line)
49
50 component-environment-prep::
1349f8 51     @/usr/bin/pkg list -vH $(USERLAND_REQUIRED_PACKAGES:%=/%) $(REQUIRED_PACKAGES:%=/%) >/dev/null || \
5cb52e 52         { echo "Adding required packages to build environment..."; \
4f8f81 53         while true ; do \
84dec3 54           $(PFEXEC) /usr/bin/pkg install --accept -v $(USERLAND_REQUIRED_PACKAGES:%=/%) $(REQUIRED_PACKAGES:%=/%) ; \
95bdca 55           RETVAL=$$? ; \
3c3d07 56           [ $$RETVAL -eq 0 ] && break; \
4f8f81 57           [ $$RETVAL -eq 4 ] && break; \
cfd6c3 58           [ $$RETVAL -ne 7 ] && echo "pkg install returned $$RETVAL" && exit 1; \
95bdca 59           sleep 10; \
D 60         done; }
06c6b6 61
MT 62 component-test-environment-check:: component-environment-check
63     $(call separator-line,Required Additional Packages Needed for Testing Only)
b1d234 64     @[ -z "$(strip $(USERLAND_TEST_REQUIRED_PACKAGES))$(strip $(TEST_REQUIRED_PACKAGES))" ] || \
MT 65         /usr/bin/pkg list -vH $(USERLAND_TEST_REQUIRED_PACKAGES:%=/%) $(TEST_REQUIRED_PACKAGES:%=/%)
f3591a 66     @C=0 ; \
MT 67         for p in $(TEST_CONFLICTING_PACKAGES) ; do \
68             /usr/bin/pkg list -q /$$p && echo "Conflicting package $$p found" && C=1 ; \
69         done ; \
70         exit $$C
06c6b6 71     $(call separator-line)
MT 72
73 component-test-environment-prep::
b1d234 74     @[ -z "$(strip $(USERLAND_TEST_REQUIRED_PACKAGES))$(strip $(TEST_REQUIRED_PACKAGES))" ] || \
MT 75         /usr/bin/pkg list -vH $(USERLAND_TEST_REQUIRED_PACKAGES:%=/%) $(TEST_REQUIRED_PACKAGES:%=/%) >/dev/null || \
06c6b6 76         { echo "Adding required packages to testing environment..."; \
MT 77         while true ; do \
b1d234 78           $(PFEXEC) /usr/bin/pkg install --accept -v $(USERLAND_TEST_REQUIRED_PACKAGES:%=/%) $(TEST_REQUIRED_PACKAGES:%=/%) ; \
06c6b6 79           RETVAL=$$? ; \
MT 80           [ $$RETVAL -eq 0 ] && break; \
81           [ $$RETVAL -eq 4 ] && break; \
82           [ $$RETVAL -ne 7 ] && echo "pkg install returned $$RETVAL" && exit 1; \
83           sleep 10; \
84         done; }
85
bf604a 86 ZONENAME_PREFIX = bz
87 ZONENAME_ID = $(shell echo "$(WS_TOP)" | sha1sum | cut -c0-7)-$(COMPONENT_NAME)
88 ZONENAME = $(ZONENAME_PREFIX)-$(ZONENAME_ID)
89
90 component-zone-template:
91     $(call separator-line)
92     $(call separator-line,Create template zone)
93     USER_ID=$$(id -u) && \
94     $(PFEXEC) $(ZONE) --prefix $(ZONENAME_PREFIX) create-template -u $${USER} -i $${USER_ID}
95
96 component-zone-build:
97     $(call separator-line)
98     $(call separator-line,Create $(ZONENAME))
99     $(PFEXEC) $(ZONE) --prefix $(ZONENAME_PREFIX) spawn-zone --id $(ZONENAME_ID)
100     $(call separator-line,Boot $(ZONENAME))
101     @while $$(true); do \
102         echo "Waiting for zone $(ZONENAME) to boot..."; \
103         $(PFEXEC) /usr/sbin/zlogin -l $${USER} $(ZONENAME) \
104                 /bin/true >/dev/null 2>&1 && break; \
105         sleep 10; \
106     done
107     # FIXME:
108     # - remove once we figure out a better way how to enable zoneproxy-client inside the nlipkg brand
109     @while $$(true); do \
110           echo "Waiting for $(ZONENAME) config repository.."; \
111           $(PFEXEC) /usr/bin/svcs -z $(ZONENAME) -a >/dev/null 2>&1 && break; \
112           sleep 10; \
113       done
114     # We need to create door inside  after zone-proxy-client is running
115     $(call separator-line,Configure IPS for $(ZONENAME))
116     $(PFEXEC) /usr/lib/zones/zoneproxy-adm $(ZONENAME)
117     @while $$(true); do \
118           echo "Waiting for zoneproxyd to be ready.."; \
119           PROXY_PID=$$(/usr/bin/svcs -p svc:/application/pkg/zones-proxyd:default | \
120               nawk '$$0 ~ /zoneproxyd/ {print $$2}') && \
121               $(PFEXEC) /usr/bin/pfiles $${PROXY_PID} | \
122               $(GNU_GREP) $(ZONENAME) >/dev/null 2>&1 && break; \
123           sleep 10; \
124       done
125     $(PFEXEC) /usr/sbin/svcadm -z $(ZONENAME) \
126         enable svc:/application/pkg/zones-proxy-client:default
127     ZONEROOT="$$(/usr/sbin/zoneadm -z $(ZONENAME) list -p | cut -d: -f4)/root" && \
128         $(PFEXEC) /usr/bin/pkg -R $${ZONEROOT} set-property use-system-repo True && \
129     while $$(true); do \
130         echo "Waiting for sysrepo to be ready..." && \
131         $(PFEXEC) /usr/bin/pkg -R $${ZONEROOT} publisher | \
132         $(GNU_GREP) syspub >/dev/null 2>&1 && break; \
133         sleep 10; \
134     done
135     $(call separator-line,Build in $(ZONENAME))
136     $(PFEXEC) /usr/sbin/zlogin -l $${USER} $(ZONENAME) \
137         "cd $(COMPONENT_DIR); gmake install"
138     $(call separator-line)
139
140 component-zone-cleanup:
141     $(PFEXEC) $(ZONE) destroy-zone --id $(ZONENAME_ID)
142
627785 143 # Short aliases for user convenience
144 env-check:: component-environment-check
145 env-prep:: component-environment-prep
06c6b6 146 test-env-check:: component-test-environment-check
MT 147 test-env-prep:: component-test-environment-prep