make-rules/build-zone.mk
author Mike Sullivan <Mike.Sullivan@Oracle.COM>
Mon, 10 Dec 2012 13:30:55 -0800
changeset 1077 17d2fc72ab7f
parent 11 0839bb401298
child 3770 ca450a806cc1
permissions -rw-r--r--
Close of build 11.

#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the "License").
# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
# Copyright (c) 2010, Oracle and/or it's affiliates.  All rights reserved.
#

#
# Rules and Macros for creating a template build zone from the installed system
# and a set of build zones that are clones of the template build zone.
#
# To use these rules to create a template build zone
#  $ gmake -f make-rules/build-zone.mk template-build-zone
#
# To use these rules to clone the template zone
#  $ gmake -f make-rules/build-zone.mk build-zone-[1-9]
# or
#  $ gmake -f make-rules/build-zone.mk \
#		/rpool/zones/build-zone-{*}/root/etc/sysidcfg
#
# Before you create any cloned build zones, it is recommended that you create
# the template build zone, boot it, and make any customizations to it first.
# The act of booting the template zone will cause it to perform any "first boot"
# tasks that might othwise slow down the initial boot of a new build zone.
# Also, all customizations of the template zone will only propagate to the build
# zones when they are created.
#

ZONECFG =		/usr/sbin/zonecfg
ZONEADM =		/usr/sbin/zoneadm
TZ=			$(shell sed -e '/^TZ=/!d' -e 's;TZ=;;' /etc/default/init)

ZONESCFG_DIR =		/etc/zones
BUILD_ZONE_SPACE =	/rpool/zones

TOUCH =			/usr/bin/touch

SYSIDCFG =		root/etc/sysidcfg
ZI_TAG =		root/.installed

# the name of the template build zone
TMPL_ZONE_NAME =	template-build-zone

#
# The template build zone will start with 'entire' installed.  We include
# additional packages to make the build zones more closely match most
# components' build requirements.  This makes build zone preparation quicker.
#
#TMPL_ZONE_TOOLS +=	developer/gcc-3
#TMPL_ZONE_TOOLS +=	developer/gnu-binutils
#TMPL_ZONE_TOOLS +=	developer/sunstudio12u1
TMPL_ZONE_TOOLS +=	archiver/gnu-tar
TMPL_ZONE_TOOLS +=	compress/p7zip
TMPL_ZONE_TOOLS +=	compress/unzip
TMPL_ZONE_TOOLS +=	developer/build/ant
TMPL_ZONE_TOOLS +=	developer/build/autoconf
TMPL_ZONE_TOOLS +=	developer/build/automake-110
TMPL_ZONE_TOOLS +=	developer/build/gnu-make
TMPL_ZONE_TOOLS +=	developer/build/libtool
TMPL_ZONE_TOOLS +=	developer/build/make
TMPL_ZONE_TOOLS +=	developer/gnome/gettext
TMPL_ZONE_TOOLS +=	developer/java/jdk
TMPL_ZONE_TOOLS +=	developer/lexer/flex
TMPL_ZONE_TOOLS +=	developer/macro/cpp
TMPL_ZONE_TOOLS +=	developer/macro/gnu-m4
TMPL_ZONE_TOOLS +=	developer/object-file
TMPL_ZONE_TOOLS +=	developer/parser/bison
TMPL_ZONE_TOOLS +=	file/gnu-coreutils
TMPL_ZONE_TOOLS +=	file/gnu-findutils
TMPL_ZONE_TOOLS +=	library/libxslt
TMPL_ZONE_TOOLS +=	library/pcre
TMPL_ZONE_TOOLS +=	text/gawk
TMPL_ZONE_TOOLS +=	text/gnu-diffutils
TMPL_ZONE_TOOLS +=	text/gnu-gettext
TMPL_ZONE_TOOLS +=	text/gnu-grep
TMPL_ZONE_TOOLS +=	text/gnu-patch
TMPL_ZONE_TOOLS +=	text/gnu-sed
TMPL_ZONE_TOOLS +=	text/groff
TMPL_ZONE_TOOLS +=	text/texinfo

TMPL_ZONE_PKGS =	$(TMPL_ZONE_TOOLS)

template-build-zone:	$(BUILD_ZONE_SPACE)/$(TMPL_ZONE_NAME)/$(SYSIDCFG)
build-zone-1:		$(BUILD_ZONE_SPACE)/build-zone-1/$(SYSIDCFG)
build-zone-2:		$(BUILD_ZONE_SPACE)/build-zone-2/$(SYSIDCFG)
build-zone-3:		$(BUILD_ZONE_SPACE)/build-zone-3/$(SYSIDCFG)
build-zone-4:		$(BUILD_ZONE_SPACE)/build-zone-4/$(SYSIDCFG)
build-zone-5:		$(BUILD_ZONE_SPACE)/build-zone-5/$(SYSIDCFG)
build-zone-6:		$(BUILD_ZONE_SPACE)/build-zone-6/$(SYSIDCFG)
build-zone-7:		$(BUILD_ZONE_SPACE)/build-zone-7/$(SYSIDCFG)
build-zone-8:		$(BUILD_ZONE_SPACE)/build-zone-8/$(SYSIDCFG)
build-zone-9:		$(BUILD_ZONE_SPACE)/build-zone-9/$(SYSIDCFG)

# zone install options.  The template zone uses "install", while the build
# zones "clone" the template zone.
ZI_OPT =				clone $(TMPL_ZONE_NAME)
$(BUILD_ZONE_SPACE)/$(TMPL_ZONE_NAME)/$(ZI_TAG): \
	ZI_OPT = 			install $(TMPL_ZONE_PKGS:%=-e %)

$(BUILD_ZONE_SPACE):
	$(MKDIR) $@

# configure a zone
$(ZONECFG_DIR)/%.xml:	$(BUILD_ZONE_SPACE)
	( echo "create -b"; \
	  echo "set zonepath=$(BUILD_ZONE_SPACE)/$(@:$(ZONECFG_DIR)/%.xml=%)"; \
	  echo "set brand=ipkg"; \
	  echo "set autoboot=false"; \
	  echo "verify"; \
	  echo "commit" ) | $(ZONECFG) -z $(@:$(ZONECFG_DIR)/%.xml=%)

# install a zone
$(BUILD_ZONE_SPACE)/%/$(ZI_TAG):	$(ZONECFG_DIR)/%.xml
	$(ZONEADM) -z $(@:$(BUILD_ZONE_SPACE)/%/$(ZI_TAG)=%) $(ZI_OPT)

$(BUILD_ZONE_SPACE)/%/$(SYSIDCFG):	$(BUILD_ZONE_SPACE)/%/$(ZI_TAG)
	( echo "system_locale=C"; \
	  echo "timezone=$(TZ)"; \
	  echo "terminal=xterms"; \
	  echo "security_policy=NONE"; \
	  echo "timeserver=localhost"; \
	  echo "name_service=NONE"; \
	  echo "network_interface=none {"; \
	  echo "    hostname=$(@:$(BUILD_ZONE_SPACE)/%/$(SYSIDCFG)=%)"; \
	  echo "}"; \
	  echo "nfs4_domain=dynamic"; \
	  echo "root_password=NP" ) > $@