Marcel Telka
2024-04-05 a885899322f8424d6d708e5c3143b6c43488446d
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; }
12a1d2 85     @for p in $(TEST_CONFLICTING_PACKAGES) ; do \
MT 86         /usr/bin/pkg list -q /$$p || continue ; \
87         echo "Removing conflicting packages from testing environment..." ; \
88         while true ; do \
89           $(PFEXEC) /usr/bin/pkg uninstall -v --deny-new-be --ignore-missing $(TEST_CONFLICTING_PACKAGES:%=/%) ; \
90           RETVAL=$$? ; \
91           [ $$RETVAL -eq 0 ] && exit 0 ; \
92           [ $$RETVAL -ne 7 ] && echo "pkg uninstall returned $$RETVAL" && exit 1 ; \
93           sleep 10 ; \
94         done ; \
95     done
06c6b6 96
bf604a 97 ZONENAME_PREFIX = bz
98 ZONENAME_ID = $(shell echo "$(WS_TOP)" | sha1sum | cut -c0-7)-$(COMPONENT_NAME)
99 ZONENAME = $(ZONENAME_PREFIX)-$(ZONENAME_ID)
100
101 component-zone-template:
102     $(call separator-line)
103     $(call separator-line,Create template zone)
104     USER_ID=$$(id -u) && \
105     $(PFEXEC) $(ZONE) --prefix $(ZONENAME_PREFIX) create-template -u $${USER} -i $${USER_ID}
106
107 component-zone-build:
108     $(call separator-line)
109     $(call separator-line,Create $(ZONENAME))
110     $(PFEXEC) $(ZONE) --prefix $(ZONENAME_PREFIX) spawn-zone --id $(ZONENAME_ID)
111     $(call separator-line,Boot $(ZONENAME))
112     @while $$(true); do \
113         echo "Waiting for zone $(ZONENAME) to boot..."; \
114         $(PFEXEC) /usr/sbin/zlogin -l $${USER} $(ZONENAME) \
115                 /bin/true >/dev/null 2>&1 && break; \
116         sleep 10; \
117     done
118     # FIXME:
119     # - remove once we figure out a better way how to enable zoneproxy-client inside the nlipkg brand
120     @while $$(true); do \
121           echo "Waiting for $(ZONENAME) config repository.."; \
122           $(PFEXEC) /usr/bin/svcs -z $(ZONENAME) -a >/dev/null 2>&1 && break; \
123           sleep 10; \
124       done
125     # We need to create door inside  after zone-proxy-client is running
126     $(call separator-line,Configure IPS for $(ZONENAME))
127     $(PFEXEC) /usr/lib/zones/zoneproxy-adm $(ZONENAME)
128     @while $$(true); do \
129           echo "Waiting for zoneproxyd to be ready.."; \
130           PROXY_PID=$$(/usr/bin/svcs -p svc:/application/pkg/zones-proxyd:default | \
131               nawk '$$0 ~ /zoneproxyd/ {print $$2}') && \
132               $(PFEXEC) /usr/bin/pfiles $${PROXY_PID} | \
133               $(GNU_GREP) $(ZONENAME) >/dev/null 2>&1 && break; \
134           sleep 10; \
135       done
136     $(PFEXEC) /usr/sbin/svcadm -z $(ZONENAME) \
137         enable svc:/application/pkg/zones-proxy-client:default
138     ZONEROOT="$$(/usr/sbin/zoneadm -z $(ZONENAME) list -p | cut -d: -f4)/root" && \
139         $(PFEXEC) /usr/bin/pkg -R $${ZONEROOT} set-property use-system-repo True && \
140     while $$(true); do \
141         echo "Waiting for sysrepo to be ready..." && \
142         $(PFEXEC) /usr/bin/pkg -R $${ZONEROOT} publisher | \
143         $(GNU_GREP) syspub >/dev/null 2>&1 && break; \
144         sleep 10; \
145     done
146     $(call separator-line,Build in $(ZONENAME))
147     $(PFEXEC) /usr/sbin/zlogin -l $${USER} $(ZONENAME) \
148         "cd $(COMPONENT_DIR); gmake install"
149     $(call separator-line)
150
151 component-zone-cleanup:
152     $(PFEXEC) $(ZONE) destroy-zone --id $(ZONENAME_ID)
153
627785 154 # Short aliases for user convenience
155 env-check:: component-environment-check
156 env-prep:: component-environment-prep
06c6b6 157 test-env-check:: component-test-environment-check
MT 158 test-env-prep:: component-test-environment-prep