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.
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.
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]
23 # Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
24 # Copyright (c) 2020, Adam Stevko
27 PFEXEC
= /usr
/bin
/pfexec
29 ZONE
= $(WS_TOOLS
)/userland-zone
32 @
$(PYTHON
) -c
'l="="*int(40-len("$1")/2); print("%s%s%s" % (l, "$1", l))'
35 component-environment-check
::
36 $(call separator-line
,Workspace
)
37 @echo
" Path: $(WS_TOP)"
38 @echo
" Branch: $$(git rev-parse --abbrev-ref HEAD)"
39 @echo
" Changeset: $$(git rev-parse HEAD)"
40 $(call separator-line
,System
)
42 @echo
"Zone: $$(/usr/bin/zonename)"
43 @echo
"Zone IP type: $$(/usr/bin/zonename -t)"
44 @
/usr
/sbin
/psrinfo
-vp
45 @
/usr
/sbin
/ipadm show-addr
46 $(call separator-line
,Required Packages
)
47 @
/usr
/bin
/pkg list
-vH
$(USERLAND_REQUIRED_PACKAGES
:%=/%) $(REQUIRED_PACKAGES
:%=/%)
48 $(call separator-line
)
50 component-environment-prep
::
51 @
/usr
/bin
/pkg list
-vH
$(USERLAND_REQUIRED_PACKAGES
:%=/%) $(REQUIRED_PACKAGES
:%=/%) >/dev
/null || \
52 { echo
"Adding required packages to build environment..."; \
54 $(PFEXEC
) /usr
/bin
/pkg
install --accept
-v
$(USERLAND_REQUIRED_PACKAGES
:%=/%) $(REQUIRED_PACKAGES
:%=/%) ; \
56 [ $$RETVAL -eq
0 ] && break
; \
57 [ $$RETVAL -eq
4 ] && break
; \
58 [ $$RETVAL -ne
7 ] && echo
"pkg install returned $$RETVAL" && exit
1; \
62 component-test-environment-check
:: component-environment-check
63 $(call separator-line
,Required Additional Packages Needed for Testing Only
)
64 @
[ -z
"$(strip $(USERLAND_TEST_REQUIRED_PACKAGES))$(strip $(TEST_REQUIRED_PACKAGES))" ] || \
65 /usr
/bin
/pkg list
-vH
$(USERLAND_TEST_REQUIRED_PACKAGES
:%=/%) $(TEST_REQUIRED_PACKAGES
:%=/%)
67 for p in
$(TEST_CONFLICTING_PACKAGES
) ; do \
68 /usr
/bin
/pkg list
-q
/$$p && echo
"Conflicting package $$p found" && C
=1 ; \
71 $(call separator-line
)
73 component-test-environment-prep
::
74 @
[ -z
"$(strip $(USERLAND_TEST_REQUIRED_PACKAGES))$(strip $(TEST_REQUIRED_PACKAGES))" ] || \
75 /usr
/bin
/pkg list
-vH
$(USERLAND_TEST_REQUIRED_PACKAGES
:%=/%) $(TEST_REQUIRED_PACKAGES
:%=/%) >/dev
/null || \
76 { echo
"Adding required packages to testing environment..."; \
78 $(PFEXEC
) /usr
/bin
/pkg
install --accept
-v
$(USERLAND_TEST_REQUIRED_PACKAGES
:%=/%) $(TEST_REQUIRED_PACKAGES
:%=/%) ; \
80 [ $$RETVAL -eq
0 ] && break
; \
81 [ $$RETVAL -eq
4 ] && break
; \
82 [ $$RETVAL -ne
7 ] && echo
"pkg install returned $$RETVAL" && exit
1; \
85 @for p in
$(TEST_CONFLICTING_PACKAGES
) ; do \
86 /usr
/bin
/pkg list
-q
/$$p || continue
; \
87 echo
"Removing conflicting packages from testing environment..." ; \
89 $(PFEXEC
) /usr
/bin
/pkg
uninstall -v
--deny-new-be
--ignore-missing
$(TEST_CONFLICTING_PACKAGES
:%=/%) ; \
91 [ $$RETVAL -eq
0 ] && exit
0 ; \
92 [ $$RETVAL -ne
7 ] && echo
"pkg uninstall returned $$RETVAL" && exit
1 ; \
98 ZONENAME_ID
= $(shell echo
"$(WS_TOP)" | sha1sum | cut
-c0-7
)-$(COMPONENT_NAME
)
99 ZONENAME
= $(ZONENAME_PREFIX
)-$(ZONENAME_ID
)
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}
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
; \
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
; \
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
; \
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
&& \
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
; \
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
)
151 component-zone-cleanup
:
152 $(PFEXEC
) $(ZONE
) destroy-zone
--id
$(ZONENAME_ID
)
154 # Short aliases for user convenience
155 env-check
:: component-environment-check
156 env-prep
:: component-environment-prep
157 test-env-check
:: component-test-environment-check
158 test-env-prep
:: component-test-environment-prep