L2 Cache

Behold the power of |!

User Tools

Site Tools



This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
snipets:solaris:build-zone [2014/09/30 19:35]
sjorge [packages]
snipets:solaris:build-zone [2014/10/09 22:02] (current)
Line 49: Line 49:
 </​code>​ </​code>​
 +Enable sendmail so you get local maildrop
 +<code bash>
 +svcadm enable svc:/​network/​smtp:​sendmail
 +===== illumos-omnios environment =====
 +:!: don't forget to set the correct the USER in the paths!
 +<file bash /​export/​home/​USER/​illumos-omnios.env>​
 +#       ​Configuration variables for the runtime environment of the nightly
 +# build script and other tools for construction and packaging of releases.
 +# This script is sourced by '​nightly'​ and '​bldenv'​ to set up the environment
 +# for the build. This example is suitable for building a gate,
 +# which will contain the resulting packages and archives (builds of the gate
 +# are done in children and then the resulting archives, packages, and proto
 +# area are put into the parent for everyone to use). It is based off
 +# the onnv release. It sets NIGHTLY_OPTIONS to make nightly do:
 +#       DEBUG and non-DEBUG builds (-D)
 +#       runs 'make check' (-C)
 +#       runs lint in usr/src (-l plus the LINTDIRS variable)
 +#       sends mail on completion (-m and the MAILTO variable)
 +#       Does NOT bringover (-n)
 +#       ​creates packages for PIT/RE (-p)
 +#       ​checks for changes in ELF runpaths (-r)
 +#       ​checks for changes in unreferenced files (-f)
 +NIGHTLY_OPTIONS="​-DClmnprf"; ​           export NIGHTLY_OPTIONS
 +# This is a variable for the rest of the script - GATE doesn'​t matter to
 +# nightly itself
 +GATE=illumos-omnios; ​                           export GATE
 +# CODEMGR_WS - where is your workspace at (or what should nightly name it)
 +# there is only one definition here, which assumes all the gate build machines
 +# (sparc and x86) are set up the same. But remember, this is a script, so
 +# you _could_ look at $MACH or `uname -n` and set these variables differently.
 +CODEMGR_WS="/​export/​home/​USER/​build/​$GATE"; ​  ​export CODEMGR_WS
 +# PARENT_WS is used to determine the parent of this workspace. This is
 +# for the options that deal with the parent workspace (such as where the
 +# proto area will go).
 +# If you use this, it must be local (or nfs): nightly cannot copy
 +# over ssh or http.
 +PARENT_WS="/​export/​home/​USER/​build/​$GATE"; ​           export PARENT_WS
 +# CLONE_WS is the workspace nightly should do a bringover from.
 +#​CLONE_WS="​ssh://​anonhg@onnv.sfbay.sun.com//​export/​onnv-clone";​ export CLONE_WS
 +# CLOSED_CLONE_WS is the workspace from which nightly will acquire the
 +# usr/closed tree.
 +# CLOSED_CLONE_WS="​${CLONE_WS}/​usr/​closed"​
 +# ON_CLOSED_BINS -> location of closed binaries.
 +ON_CLOSED_BINS="/​export/​home/​USER/​ws/​closed"; ​   export ON_CLOSED_BINS
 +# The bringover, if any, is done as STAFFER.
 +# Set STAFFER to your own login as gatekeeper or integration engineer.
 +# The point is to use group "​staff"​ and avoid referencing the parent
 +# workspace as root.
 +# Some scripts optionally send mail messages to MAILTO.
 +STAFFER=USER; ​                        ​export STAFFER
 +MAILTO=$STAFFER; ​                       export MAILTO
 +# The project (see project(4)) under which to run this build. ​ If not
 +# specified, the build is simply run in a new task in the current project.
 +BUILD_PROJECT=; ​                        ​export BUILD_PROJECT
 +# You should not need to change the next four lines
 +LOCKNAME="​`basename $CODEMGR_WS`_nightly.lock";​ export LOCKNAME
 +ATLOG="​$CODEMGR_WS/​log"; ​                       export ATLOG
 +LOGFILE="​$ATLOG/​nightly.log"; ​                  ​export LOGFILE
 +MACH=`uname -p`;                                export MACH
 +# When the -A flag is specified, and ELF_DATA_BASELINE_DIR is defined,
 +# the ELF interface description file resulting from the build is compared
 +# to that from the specified directory. This ensures that our object
 +# versioning evolves in a backward compatible manner.
 +# You should not need to change this unless you wish to use locally cached
 +# baseline files. If you use this, it must be local (or nfs): nightly cannot
 +# copy over ssh or http.
 +#​ELF_DATA_BASELINE_DIR="/​ws/​onnv-gate/​usr/​src/​ELF-data-baseline.$MACH";​ export ELF_DATA_BASELINE_DIR
 +# This is usually just needed if the closed tree is missing, or when
 +# building a project gate with the -O (cap oh) flag.
 +#export ON_CRYPTO_BINS
 +# REF_PROTO_LIST - for comparing the list of stuff in your proto area
 +# with. Generally this should be left alone, since you want to see differences
 +# between todays build and yesterdays.
 +REF_PROTO_LIST=$PARENT_WS/​usr/​src/​proto_list_${MACH};​ export REF_PROTO_LIST
 +#       build environment variables, including version info for mcs, motd,
 +# motd, uname and boot messages. Mostly you shouldn'​t change this except
 +# when the release slips (nah) or when starting a new release.
 +ROOT="​$CODEMGR_WS/​proto/​root_${MACH}"; ​ export ROOT
 +SRC="​$CODEMGR_WS/​usr/​src"; ​             export SRC
 +VERSION="​$GATE"; ​                       export VERSION
 +# the RELEASE and RELEASE_DATE variables are set in Makefile.master;​
 +# there might be special reasons to override them here, but that
 +# should not be the case in general
 +# RELEASE="​5.10.1"; ​                    ​export RELEASE
 +# RELEASE_DATE="​October 2007"; ​         export RELEASE_DATE
 +# proto area in parent for optionally depositing a copy of headers and
 +# libraries corresponding to the protolibs target
 +PARENT_ROOT=$PARENT_WS/​proto/​root_$MACH;​ export PARENT_ROOT
 +PARENT_TOOLS_ROOT=$PARENT_WS/​usr/​src/​tools/​proto/​root_$MACH-nd;​ export PARENT_TOOLS_ROOT
 +# Package creation variables. ​ You probably shouldn'​t change these,
 +# either.
 +# PKGARCHIVE determines where repositories will be created.
 +# PKGPUBLISHER* control the publisher settings for those repositories.
 +PKGARCHIVE="​${PARENT_WS}/​packages/​${MACH}/​nightly"; ​    ​export PKGARCHIVE
 +PKGPUBLISHER_REDIST="​testing"; ​                    ​export PKGPUBLISHER_REDIST
 +# PKGPUBLISHER_NONREDIST="​on-extra"; ​                   export PKGPUBLISHER_NONREDIST
 +# we want make to do as much as it can, just in case there'​s more than
 +# one problem. This is especially important with the gate, since multiple
 +# unrelated broken things can be integrated.
 +# Magic variable to prevent the devpro compilers/​teamware from sending
 +# mail back to devpro on every use.
 +# Build tools - don't set these unless you know what you're doing. ​ These
 +# variables allows you to get the compilers and onbld files locally or
 +# through cachefs. ​ Set BUILD_TOOLS to pull everything from one location.
 +# Alternately,​ you can set ONBLD_TOOLS to where you keep the contents of
 +# SUNWonbld and SPRO_ROOT to where you keep the compilers.
 +BUILD_TOOLS=/​opt; ​                              ​export BUILD_TOOLS
 +ONBLD_TOOLS=/​opt/​onbld; ​                ​export ONBLD_TOOLS
 +SPRO_ROOT=/​opt/​SUNWspro; ​                       export SPRO_ROOT
 +# These two are OmniOS-specific tweaks.
 +GCC_ROOT=/​opt/​gcc-4.4.4/; ​          ​export GCC_ROOT
 +# GCC-only, REQUIRED for OmniOS.
 +__GNUC=""; ​          ​export __GNUC
 +CW_NO_SHADOW=1; ​    ​export CW_NO_SHADOW
 +ONLY_LINT_DEFS=-I${SPRO_ROOT}/​sunstudio12.1/​prod/​include/​lint;​ export ONLY_LINT_DEFS
 +# SET ONNV_BUILDNUM to override the current "​151012"​ of OmniOS.
 +export ONNV_BUILDNUM=151012
 +# This goes along with lint - it is a series of the form "A [y|n]" which
 +# means "go to directory A and run 'make lint'"​ Then mail me (y) the
 +# difference in the lint output. '​y'​ should only be used if the area you're
 +# linting is actually lint clean or you'll get lots of mail.
 +# You shouldn'​t need to change this though.
 +#​LINTDIRS="​$SRC y"; ​    ​export LINTDIRS
 +# Reference to IA32 IHV workspace, proto area and packages
 +#​IA32_IHV_WS=/​ws/​${GATE}-ihv; ​                          ​export IA32_IHV_WS
 +#​IA32_IHV_ROOT=$IA32_IHV_WS/​proto/​root_i386; ​           export IA32_IHV_ROOT
 +#​IA32_IHV_PKGS=$IA32_IHV_WS/​packages/​i386/​nightly; ​     export IA32_IHV_PKGS
 +# Reference to binary-only IA32 IHV packages
 +#export IA32_IHV_BINARY_PKGS
 +# Set this flag to '​n'​ to disable the automatic validation of the dmake
 +# version in use.  The default is to check it.
 +# Set this flag to '​n'​ to disable the use of '​checkpaths'​. ​ The default,
 +# if the '​N'​ option is not specified, is to run this test.
 +# Set this flag to '​y'​ to enable the use of elfsigncmp to validate the
 +# output of elfsign. ​ Doing so requires that '​t'​ be set in NIGHTLY_OPTIONS.
 +# The default is to not verify them.
 +# BRINGOVER_FILES is the list of files nightly passes to bringover.
 +# If not set the default is "​usr",​ but it can be used for bringing
 +# over deleted_files or other nifty directories.
 +#​BRINGOVER_FILES="​usr deleted_files"​
 +# POST_NIGHTLY can be any command to be run at the end of nightly. ​ See
 +# nightly(1) for interactions between environment variables and this command.
 +===== user profile =====
 +You probably want to tweak your user profile for whatever shell you are using.
 +I ''​source ~/​illumos-omnios.env''​ inside my .zshrc, I also update my path with ''​
 +export PATH=$PATH:/​opt/​onbld/​bin:​~/​.bin''​
 +===== extra helper scripts =====
 +==== pserv (thanks richlowe) ====
 +<file bash /​export/​home/​USER/​.bin/​pserv>​
 +source ~/​illumos-omnios.env
 +while getopts dp: opt; do
 +case $opt in
 +d) REPODIR=nightly;;​
 +shift $(($OPTIND - 1))
 +WS=$(cd $1; pwd)
 +/​usr/​lib/​pkg.depotd -d $PARENT_WS/​packages/​$(mach)/​$REPODIR/​repo.redist -p $PORT \
 +  --readonly --log-access=none
 +===== building using nightly =====
 +It takes about 2h for me so I run inside a tmux session.
 +<code bash>
 +# build the nightly and nightly-nd repositories (no output! but you should get an e-mail if you set STAFFER)
 +nightly illumos-omnios.env
 +# serv said repositories
 +===== testing the stuff =====
 +I use a vm that pxe boots with the following kayak config.
 +<code bash kayak_cfg>​
 +### configuration
 +## rpool
 +BuildRpool c1t0d0
 +SetHostname omnios-nightly
 +SetTimezone Europe/​Brussels
 +RootPW '​$5$o.b1VKc/​$GgHl.du5uL6CYm6pRqRR7Lifj92CcBq.qDEAKUXZL21'​
 +Postboot '/​usr/​sbin/​bootadm set-menu timeout=5'​
 +## network
 +# dynamic ip address
 +Postboot '/​sbin/​ipadm create-if e1000g0'​
 +Postboot '/​sbin/​ipadm create-addr -T dhcp e1000g0/​v4'​
 +# dns
 +EnableDNS example.org
 +## add publishers
 +## onu testing automation
 +Postboot '/​usr/​gnu/​bin/​sed -i "​s/​PermitRootLogin no/​PermitRootLogin yes/g" /​etc/​ssh/​sshd_config'​
 +Postboot '/​usr/​bin/​pkg install --no-backup-be pkg:/​developer/​build/​onbld'​
 +Postboot '/​usr/​sbin/​svcadm disable svc:/​network/​sendmail-client:​default'​
 +Postboot '/​opt/​onbld/​bin/​onu -v -u http://​leonov.example.org:​9001 -U testing -t omnios-testing'​
 +Postboot '/​usr/​sbin/​beadm unmount omnios-testing'​
 +Postboot '/​usr/​sbin/​beadm mount omnios-testing /a'
 +Postboot '/​usr/​gnu/​bin/​rm /​a/​.initialboot'​
 +Postboot '/​usr/​sbin/​shutdown -i6 -g0 -y'
 +On the initial boot it will install onu and create a new BE populated with the updated packages and reboot. It will then drop you in the new system running a freshly build gate :)
snipets/solaris/build-zone.1412098509.txt.gz · Last modified: 2014/10/09 22:02 (external edit)