This document will help prepare you to build the source code for illumos. It assumes some familiarity with development on Unix-like systems.
You need an illumos-based operating system to build illumos (cross-compilation is not supported). If you don't have one installed, the quickest way to get started is to download and install OpenIndiana from openindiana.org/download. If you have an existing system with OpenSolaris installed, see Updating OpenSolaris.
Note: All commands in this guide assume you run them as an unprivileged user. sudo will be prepended to commands which need additional privileges; on some systems pfexec can be used instead, if your user has the correct RBAC profiles. The generic commands below use a $USER variable to define the current (unprivileged) user account's name which will ultimately be used to compile the project. If you are not using a stock shell or have manipulated the $USER variable in your environment at a site, system, or user level, you are responsible for diagnosing and addressing any consequences.
Note: VirtualBox has proven unfit for purpose in building from source (builds take days instead of hours) and running debug kernels (systems have problems with clock discipline and are slow or become unresponsive). If you're interested in developing for illumos, consider running on bare metal or using an alternative virtualization product (KVM, VMware, Xen).
/code/illumos-gate/packages/i386/nightly/repo.redist) is not created and onu script fails
Installing required packages
You need to install these packages in order to build illumos:
Installing compilers
The source code was traditionally built using Sun's closed-source compiler suite, which was named Sun Studio at the time of the illumos fork. The specific versions of Studio required are no longer publicly available, it is possible to build illumos with GCC; this is the only option for "new" people in the project who do not have access to the distribution archives of required Sun Studio versions. You will still need some tools from Sun Studio even if you use GCC as your compilers, but those are available as packages in the legacy OpenSolaris repository.
GCC
It is possible to build illumos using GCC (the GNU Compiler Collection, specifically its C and C++ compilers), and you should generally prefer to do this, though it is convenient to still see build results from Studio in RTIs
The primary version of GCC necessary for development and integration 4.4.4 (4.4.4-il-2) should have been installed on your system when you installed the prerequisites above. If for some reason that didn't happen (old build system, or the like) tarballs are available as described in the initial heads-up notice 2012-06-15 Illumos will now build with GCC 4.4.4 + patches.
Unfortunately, Sun Studio dmake (Distributed Make) and lint are currently required even for GCC-only builds. We currently deliver Lint libraries built using the closed Sun Studio version of lint. The lint from the unpatched (but redistributable) version of Sun Studio 12.1 in the opensolaris.org repository can be used, regardless of its utility for actually checking the software.
Run:
You'll want the symlink so that lint can be found during the build process.
Sun Studio compilers
If you wish to build with Sun Studio, you need specifically patched versions of both Studio 12 (used to compile) and 12.1 (used for lint) to get consistent results. If you do not have access to these versions, skip this section and use GCC.
illumos-gate does not build correctly with Sun Studio versions released after 12.0. Reportedly using a newer version of the compiler will produce a system containing grave, data-corrupting bugs. Patched compilers were previously available from Sun Microsystems, however not licensed for redistribution. After a recent Oracle site reorganization, the necessary compilers are no longer available.
If you have the patched versions of both Sun Studio 12 and 12.1, they should be installed in /opt/SUNWspro (Studio 12), and /opt/SUNWspro/sunstudio12.1 (Studio 12.1), respectively. Pay attention, the Studio 12.1 location is different from how it was in OpenSolaris, i.e. it's not /opt/sunstudio12.1.
The meta-procedure for cleaning up optionally prepackaged Sun Studio installations and installing the ones you require for building illumos (assuming your stashed Sun Studio 12 distribution archives are now pre-copied to /tmp) is as follows:
The first archive contains the product component sub-directories directly at the top-level, and the second has similar sub-directories under the top-level sunstudio12.1 as its children. Thus you receive the structure outlined above.
You can check if you have the correct versions installed as follows. All of the following tests must succeed and return these specific product/patch versions:
Building illumos
Preparing the source-code directory
You can use any location, but for the purposes of this guide, we will assume that you have a directory /code owned by your user ID, which you are using to obtain source and build.
For a less naive example, see the Build datasets page and some more industrious details on Managing multiple workspaces and Working on several bugs at once.
Getting the source
You may use the Git or Mercurial source code management systems to retrieve the illumos source code. Both tools will be able to retrieve the same history. Ensure about 6 gigabytes of free space for the source and binaries combined.
Getting the source with Mercurial (hg)
illumos.org hosts a Mercurial repository containing the illumos source code.
The Mercurial illumos-gate URI is:
ssh://anonhg@hg.illumos.org/illumos-gate
Note:http://hg.illumos.org/illumos-gatedoes not work. Use ssh.
Additional Mercurial mirrors:
Mercurial pulls a complete replica (clone) of the repository, including all history, from a remote source, and then updates a working copy of the files from this clone. The working copy is the files you may edit and compile. You may update the working copy from any versions of files in the repository history.
When cloning an external source code repository, Mercurial starts by creating a new directory, and fails if one already exists and is not empty. The directory may be a mountpoint for an empty ZFS dataset. Mercurial creates a |
The following example creates a clone of the "Mercurial repository" ssh://anonhg@hg.illumos.org/illumos-gate containing the illumos source code under /code; this will create a sub-directory illumos-gate under that.
Updating the source with Mercurial
If you want to get latest version of illumos-gate merged with your private development code, you need to hg pull new changes into your clone and hg update the working copy. This can be done in one command as hg pull -u. If you have committed changes prior to updating, you may be wish to hg merge them with the new changes.
For more details see: http://mercurial.selenic.com/wiki/FAQ.
There is also a simple script to update the repository.
Getting the source with Git
The repository is also available from Github using the Git source code control system.
Install Git using this command:
The Git repository URI is:git://github.com/illumos/illumos-gate.git
Or, if the Git protocol is firewalled at your site:https://github.com/illumos/illumos-gate.git
The illumos-gate source can then be cloned using:
Getting closed binaries
There are still closed components in illumos that have not yet been replaced. You must get the latest closed binaries from Sun/Oracle, since illumos currently needs those in order to build:
Note that if you had a crypto tarball from an earlier build, do not use it here, as it is no longer required to build illumos. You should remove it from your tree if already present.
Preparing the build environment
General build configuration
The build is configured using a shell script with environment variables, a template for this file is included:
The settings we are going to focus on for now are the following:
NIGHTLY_OPTIONS- You may remove the "l" (lowercaseL) option from the string, this will disablelintchecking of the code to save some time during the build, but patches should be linted.CODEMGR_WS- This should be the root of the directory with the code. If you followed the previous example, it will be/code/illumos-gate.STAFFER- Change this to the name of the non-privileged user you use on the systemVERSION- Set this toillumos-gateor whatever version string you want for the build
Important: ONNV_BUILDNUM specifies the build number which is used in packaging. If you intend to upgrade a system whose build number is greater than the one in illumos-gate (currently 148), such as OpenIndiana, you need to specify this to allow upgrades until issue #1118 is addressed. Run:
If you see, for example, "Branch: 0.151.1", you must choose a number greater than the part after the leading "0.". For example, add
to the illumos.sh script.
Building with GCC-4.4.4 (i.e. without Sun Studio)
If you are building with GCC 4.4.4 (i.e. you do NOT have Sun Studio with appropriate patches), you must append these lines to illumos.sh:
Explanation of these settings:
__GNUC- Set this to "" (the empty string), andexportit. This causes GCC to be used as the main compiler. Studio takes its place as the "shadow compiler".CW_NO_SHADOW- Set this to 1 to prevent the shadow compiler from running (for instance, if you do not have Studio at all).- ONLY_LINT_DEFS - This is needed so the
lintis able to find the propernote.hinclude file.
The last two lines make sure the patched version of GCC-4.4.4 is used (the default gcc version shipped with e.g. OpenIndiana, gcc-3.4.3, is not suitable for building illumos), as described here.
For the moment we still require that contributed changes build with Sun Studio as the compiler. We understand that the required version of Sun Studio is no longer publicly available and will accept contributions that were tested only with GCC.
If you are trying to build with GCC 4.4.4 and your build fails because of some invalid GCC warning options, try setting the variables GCC_ROOT and CW_GCC_DIR as shown above and described here.
Starting the build
You are now ready to start the illumos build.
Since this process may take up to several hours depending on your system (reference build times are in a chart below), it may be wise to start the build job in a VNC session, GNU Screen (screen), or tmux. The screen program can be installed with the pkg:/terminal/screen package.
Run the following command to start the build:
Note that the command does not give any progress output. You can instead follow the log file at log/nightly.log, which is updated (slowly) during the build process. In another terminal, run:
After the build is complete, the nightly.log file and some other generated logs are moved into a uniquely named subdirectory log/log.$TIMESTAMP/ (i.e. /code/illumos-gate/log/log.2012-04-20.04\:17/ ).
A dry overview of the build progress (hopefully small – about 2KB in size – with no errors) is saved in log/log.$TIMESTAMP/mail_msg file intended for mailing to the build administrator after the build completes (this automation is out of the scope of the nightly.sh script). If you do receive any errors in the mail_msg report file, you can grep the error lines in the larger nightly.log file.
Performing an incremental build
If you've made changes after completing a nightly build, you can perform an incremental build without discarding the already built files.
To make this the default, edit illumos.sh and add the character i to NIGHTLY_OPTIONS.
Before submitting a patch, we request that you perform a full, non-incremental build.
Building specific components, and other info
Installing built software
Installing the nightly build on local machine with onu script
The build process will generate updated packages. Depending on the NIGHTLY_OPTIONS variable in illumos.sh script, the packages will be written either to $PWD/packages/i386/nightly (with debug, the typical default) or to $PWD/packages/i386/nightly-nd (without debug). Therefore there are two possible commands to install the software you you just built. You need choose the proper onu command, typically the first one listed below.
Typical install: you can install with onu for debug builds (the default, with 'F' and 'D' characters in NIGHTLY_OPTIONS variable in illumos.sh):
The non-typical installs are detailed in the following pages:
- Advanced - non-debug install describes different
onuoptions for the different set of built packages. - Redistributing built packages and Installing built illumos packages into BEs on a remote host and non-onu updates describe how to install illumos using the package depot server over the network, perhaps on a machine different from your build host. This recipe bypasses the
onuscript automation and manipulates your boot environments withbeadmandpkgcommands directly.
Possible problems
Localization bugs #167 and #168
illumos has entirely different localization infrastructure from Solaris, so your existing system locales will not work.
The English locales for illumos are in pkg:/locale/en (NOT pkg:/system/locale/en), and if you wish to use them, you'll need to install that package after you reboot. Likewise, other locales are in pkg:/locale/<language code> where <language code> is a two letter ISO 639-1 code, except for zh_cn/zh_hk/zh_mo/zh_sg/zh_tw.
If your locale is not installed, it will cause problems with software which behaves badly if setlocale() fails. This includes, at least, time-slider and svcs(1M). The pkg(5) commands print a warning, but function normally.
If this is a problem, you can "export LANG=C LC_ALL=C" as a workaround, and change the LANG setting in/etc/default/init to 'C' (and reboot) to make the change permanent.
Package repository (path /code/illumos-gate/packages/i386/nightly/repo.redist) is not created and onu script fails
This error has happened to me whenever I ran the default checkout and full-build procedure outlined above (in VirtualBox VMs); I don't yet know why (possibly due to a wrong setup of my SunStudio compiler stack, as was later discovered).
However, rerunning with an incremental build has created the package repository correctly (as well as full builds with proper SunStudio setup):
In any case, if you have build errors or other "inconsistencies", it would be wise to revise the mail_msg logfile that can contain short error descriptions, and grep for those errors in the longer nightly.log file. If that doesn't help, you should also recreate the build in a "clean lab" environment, which may be set up as a local zone according to the Building in zones instructions and rule out the local environment's influence (conflicting libraries and binaries, perhaps from your own earlier builds, come to mind first).
Build times
As a convenience, we will try to assemble some build times for various hardware configurations here, so you can get an idea in advance of how long it will take:
| Processor(s) | No. of cores | Memory | Time (HH:MM) | Notes |
|---|---|---|---|---|
| 2 x Xeon X5570 2.93GHz | 2 x 4 | 36 GB | 00:19 | NIGHTLY_OPTIONS='-FnCDmprt' |
| 4 x Opteron 6172 2.1 GHz | 4 x 12 | 128 GB | 00:21 | NIGHTLY_OPTIONS='-FnCDmprt' |
| Xeon E3-1270 3.4 GHz | 4 | 16 GB | 00:23 | NIGHTLY_OPTIONS='-FnCDmprt' |
| Xeon E3-1245V2 3.4 GHz | 4 | 16 GB | 00:31 | NIGHTLY_OPTIONS='-FnCDmprt' |
| Core i7-2600K 3.4 GHz | 4 | 8 GB | 00:35 | NIGHTLY_OPTIONS='-nClmprt' |
| 2 x Xeon E5620 2.4 GHz | 2 x 4 | 48 GB | 00:38 | None |
| 1 x Xeon E5607 2.27GHz | 1 x 4 | 12 GB | 00:46 | NIGHTLY_OPTIONS='-FnCDmprt' |
| Xeon E3-1245V2 3.4 GHz | 4 | 16 GB | 00:47 | NIGHTLY_OPTIONS='-FnCDlmprt' (with lint) |
| 2 x Xeon E5540 2.53 GHz | 2 x 4 | 24 GB | 00:50 | With lint |
| 2 x Xeon E5506 2.13 GHz | 2 x 4 | 24 GB | 00:50 | No dmake check |
| 1 x Xeon X5650 2.67 GHz | 1 x 6 | 12 GB | 00:51 | With lint, default NIGHTLY_OPTIONS |
| 2 x Xeon E5506 2.13 GHz | 2 x 4 | 24 GB | 01:03 | None |
| Core i7-960 3.2 GHz | 4 | 9 GB | 01:03 | With lint |
| 2 x Xeon E5506 2.13 GHz | 2 x 4 | 16 GB | 01:06 | VMware Workstation guest |
| Core i7-930 2.8 GHz | 4 | 8 GB | 01:07 | VMware ESXi guest |
| Core 2 Quad Q6600 2.4 GHz | 4 | 2 GB | 01:16 | None |
| 2 x Xeon E5310 1.6 GHz | 2 x 4 | 32 GB | 01:24 | None |
| 1 x Athlon II X2 240 2.8 GHz | 2 | 2 GB | 01:27 | NIGHTLY_OPTIONS='-FnCDmprt', on a low end SSD |
| Core 2 Quad Q9300 2.5 GHz | 4 | 7 GB | 01:32 | None |
| 2 x Xeon E5420 @ 2.50GHz | 2 x 4 | 4 GB | 01:33 | Default NIGHTLY_OPTIONS; an incremental rebuild takes 13 min to walk all Makefiles |
| 2 x Opteron 2218HE 2.6 GHz | 2 x 2 | 16 GB | 01:42 | None |
| Core i5-540M 2.53 GHz | 2 | 4 GB | 01:54 | None |
| Core i3-370M 2.40 GHz | 2 | 2 GB | 02:30 | None |
| Core 2 Quad Q8200 2.33 GHz | 4 | 5 GB | 02:30 | Default NIGHTLY_OPTIONS. |
| Core 2 Duo T8300 2.3 GHz (T61) | 2 | 2 GB | 02:58 | VMware Workstation 2 CPUs |
| Core 2 Duo E6750 2.66 GHz | 2 | 8 GB | 02:59 | Sun Ultra 24 (with lint) |
| Core 2 Duo Celeron E3200 3.2 GHz | 2 | 4 GB | 03:28 | 2.4 GHz CPU over clocked to 3.2. Everything running on a low end SSD. With lint. |
| Core 2 Duo T5600 1.8 GHz | 2 | 3.3 GB | 04:26 | None |
| Opteron 146 2 GHz | 1 | 4 GB | 07:28 | None |
| 4 x Dual-Core Opteron 8218 2.6 GHz (8-vCPU VM) | 16 GB (2GB VM) | 35:47 + 9:05 | VirtualBox 3.0.12 VM, with 8 vCPUs and 2GB vRAM; local vHDD; with lint and default NIGHTLY_OPTIONS='-FnCDlmprt' NOTE: Package repo did not get built at all with the first nightly run, only with the second, incremental nightly run (another 9 hours) |
Notes:
- "Bare Metal" just slightly faster than VMware guest. On the other hand, VirtualBox painfully slow.
- More cores faster but not linear increase.
- SSD use seems to provide nice speedup.
- As expected, lint checking results in longer build times.
19 Comments
Hide/Show CommentsMay 19, 2012
Jim Klimov
This piece of advice fell off the official document, but I think it is important (as the default oi_151a
bashdoes not have$USERon my and at least one other user's machine, at least after changing privileges via "sudo su -" for root elevation or "su - username" for lowering the privileges).Throughout this manual and subsequent pages, the
$USERvariable is supposed to mean the username of your non-privileged user account used to download and build illumos software. This account should have configured a means of privilege elevation for system commands, usingsu,sudoor Solaris RBACpfexec.This variable may be or not be predefined, depending on your shell program and
~/.profileor other profile files, or some other aspects of system configuration and the installation methods used.If you don't have the variable in place, you can define it with such a block in your user's profile or system
/etc/profile, but we must disclaim that you are responsible for diagnosing and addressing any consequences:UPDATE: As other authors below note, the default OpenIndiana installation should have the variable defined in the first place.
Alternatively, less clumsy methods of getting the user name are available in OpenIndiana, including "
/usr/bin/id -un" and "/usr/bin/logname".HTH,
//Jim Klimov
May 16, 2012
risto3
funny, I have $USER and haven't ever really mucked with things there...
If $LOGNAME isn't defined, whynot `/usr/bin/logname` ?
Strange though, because according to the 'login' manpage:
If not attached to a terminal, I see your point. Perhaps in this case something like `/usr/bin/id -un` might be easier...
May 18, 2012
Jim Klimov
Well... as for "
id -un" – that option is not available even on Solaris 10 (and older too), where the snippet above originatedAs for the logname, it seems tricky... here an ssh login to
jackwas made, followed by "sudo su -":(The snippet above for setting
$USERis not injack's norroot's profile, my build user is separate)May 19, 2012
Bayard G. Bell
id -un works on illumos. If Solaris 10 is mentioned as a joke, it's a pretty bad one. To the best of my knowledge, jack only exists on installation media, which isn't suggested anywhere as a build environment. Also, sudo will set LOGNAME and USER appropriately unless the default set_logname behavior is negated, where building with sudo from jack on installation media isn't something that's recommended anywhere in any case. It's not clear to me whether we're talking about legitimate corner cases here or over-the-edge ones.
Also: the account used to build illumos does not need means of privilege escalation to build illumos, and it's probably sound practice not to assign such privileges to an account responsible for automated builds. Installing the bits and preparing the build environment are quite different questions, but the essential distinctions are not clearly called out and seem rather badly muddled.
May 19, 2012
Jim Klimov
Well, first of all, thank you both for pointing me to this feature in
id– i truly did not realize it is available.Regarding the "Solaris 10 and older" reference, part of my job is interoperability - to make sure things "just work" identically in a range of environments, from Solaris 8 to OpenIndiana, as well as in RHEL 5-6. While our other team members make their applications and j2ee servers, I make tons of scripts, profiles and init/SMF methods, to make all those assorted environments seem similar to the apps we launch. It is preferable to maintain just one script body (Sun did so too i.e. in multiplatform SRSS) and use the lowest common denominator like that clumsy textual parser for common
idoutput.I hope this piece of explanation sorts it out for the case in question, and I'll try to keep clumsy interoperability cludges like that from polluting the main illumos-and-OpenIndiana documentation if there is a simpler solution and I know of it.
As for giving the build user permissions to elevate privileges (the need for
$USERin the first place) – it was there when I first came to these docs, so I kept and enhanced this part as I couldFinally, I concur with the assessment that my installation that I tested the snippet on does deviate from the official installation method from LiveCD (due to HW problems I could not complete an installation from the media, but could mount the ISO over NFS and rsync from it, as I detailed on the Wiki, and things seem to work). I have re-tested the snippets Richard tried below, and results match – the
$USERis only lost on "sudo su -", which I do use, so it is not the illegitimate corner case stemming from my installation method. I am not sure what was different/non-standard on the other user's installation.BTW, is there a technical specification of what the installer does (i.e. to implement other compliant and compatible installation methods, including manual copying of files from media or another installation a-la-flar)?
May 19, 2012
Bayard G. Bell
sudo su - is absolutely an off-the-edge corner case for purposes of this document, which tells you either to use pfexec or sudo to escalate privilege for an enumerated set of operations to set up the build environment. That's to say: you're running specific commands, not switching to a privileged shell and depending on its environment.
As we've agreed elsewhere that any environment variables applicable to the current user that are passed to these commands will be interpolated to their current settings, is there any remaining relevance to talking about either USER or LOGNAME here?
May 19, 2012
Jim Klimov
> That's to say: you're running specific commands, not switching to a privileged shell and depending on its environment.
Well, my private procedure happened to differ, as we've now noticed (actually SUing from root into the build user without a permitted interactive login via lack of password, and trying these procedures afterwards). And I might not be the only one like that, since I was asked to add the piece on defining an absent
$USERin the first place.> is there any remaining relevance to talking about either USER or LOGNAME
I guess not, and if you have the admin privileges on the Wiki - i agree to having most of this thread removed (to an attic?) for readers' clarity, except for my first post with the workaround – for those people whose ways for any reason deviate from the ivory-tower/greenhouse environment described and expected in the trunk of the documentation (same as "/code is expected for workspaces", but you can also make zfs hierarchies or even whole local zones to similar effect and some benefits although adding complexity too much for the main document to talk about it in detail). Not all is lost for those pesky creative people, and they should know it
May 19, 2012
risto3
Hmmm, digressing a bit, but does this reveal a bug or perhaps an esoteric feature?
Why is $USER != /usr/bin/id -un and, separately, $LOGNAME != /usr/bin/logname below?
updated...
~$ echo "LOGNAME='$LOGNAME' /usr/bin/logname '`/usr/bin/logname`' USER='$USER' /usr/bin/id '`/usr/bin/id -un`'"
LOGNAME='richard' /usr/bin/logname 'richard' USER='richard' /usr/bin/id 'richard'
~$ pfexec echo "LOGNAME='$LOGNAME' /usr/bin/logname '`/usr/bin/logname`' USER='$USER' /usr/bin/id '`/usr/bin/id -un`'"
LOGNAME='richard' /usr/bin/logname 'richard' USER='richard' /usr/bin/id 'richard'
~$ sudo echo "LOGNAME='$LOGNAME' /usr/bin/logname '`/usr/bin/logname`' USER='$USER' /usr/bin/id '`/usr/bin/id -un`'"
LOGNAME='richard' /usr/bin/logname 'richard' USER='richard' /usr/bin/id 'richard'
~$ pfexec bash
~# echo "LOGNAME='$LOGNAME' /usr/bin/logname '`/usr/bin/logname`' USER='$USER' /usr/bin/id '`/usr/bin/id -un`'"
LOGNAME='richard' /usr/bin/logname 'richard' USER='richard' /usr/bin/id 'root'
~# exit
~$ sudo su -
OpenIndiana (powered by illumos) SunOS 5.11 oi_151a4 April 2012
~# echo "LOGNAME='$LOGNAME' /usr/bin/logname '`/usr/bin/logname`' USER='$USER' /usr/bin/id '`/usr/bin/id -un`'"
LOGNAME='root' /usr/bin/logname 'richard' USER='' /usr/bin/id 'root'
~# exit
~$
May 19, 2012
Jim Klimov
(Explanation that may be needed for other readers) Your first tests all report "richard" because the expansion of shell variables and execution-output substitutes take place in the context of the user who calls the shell command line, before sudo or pfexec are executed. Essentially they execute "echo" with root privileges and a predefined string constructed by the non-root user. This is basically what we want to happen in the privilege elevations throughout the page.
The last two tests are correct in form, by first executing a subshell, and present the interesting discrepancies in variables and outputs.
I've also run these tests on my non-default installation and got same results modulo non-privileged user's name.
Here is one more piece Richard missed:
So, it seems to be a problem with "
su" unsetting the env-vars or keeping them in place (as requested by the dash parameter) – no further program or profile (re-)defines them to something else (i.e. "root")./usr/bin/lognameseems to retain the value of the user who originally started the shell, i.e. via SSH, throughout the privilege elevations, which may be a good thing for these installation routines: we can elevate privileges once (spawn a shell), set up all needed stuff, and use this program's output tochown(or you'd rather use the ZFS ACL permissions available in OpenIndiana?) and perhapszfs allowaccesses to the specific user we logged in with in the first place – if that matches our wishes.May 19, 2012
Bayard G. Bell
The problem isn't misbehaviour, it's that variables are interpolated before being passed to sudo. Thus if you take the same thing and make it into a script, you won't have any problems using sudo. The su man page explicitly states that "su -" is meant to behave as though it were a login shell. pfexec isn't changing the user, so you wouldn't expect it to muck with the environment.
May 29, 2012
Yuri Pankov
Why do we advise on using /code (or, at least, are using in examples) while default illumos.sh sets WS to $HOME/ws/$GATE? Wouldn't it be better to switch examples to ~/ws?
May 29, 2012
Jim Klimov
...with the default
GATE="testws"I also thought about this, but by the time I got to the Wikis, the "/code" example was already in place in several papers. I confess, I added some more such examples
I do agree that somehow aligning the documentation with the script defaults (and requiring minimal to zero change of
illumos.shat that) would be beneficial. Still, the examples on Build datasets can stay in place for people Managing multiple workspaces, while zfs-clones of the golden code repo would become the build user's ~/ws/illumos-gate mountpoint.Aug 16, 2012
Stefan Ring
The warning about slow builds on VirtualBox does apparently only apply on older CPUs without nested page table (EPT) and VPID support. I've done a full build inside a 6-vCPU machine on an Intel Xeon X5670 yesterday, and it took close to an hour.
Feb 21, 2013
Raven
Hi everyone.
I am new to illumos, but i want to know more about illumos.
These days, I built illumos on my openindiana following this elegant guide.
---------------------------------------------my openindiana----------------------------------------------
root@openindiana:~# cat /etc/release
OpenIndiana Development oi_151.1.5 X86 (powered by illumos)
Copyright 2011 Oracle and/or its affiliates. All rights reserved.
Use is subject to license terms.
Assembled 26 June 2012
root@openindiana:~#
------------------------------------------------------------------------------------------------------------------
After nearly 7 hours, the building process finished. I used the following command
time ./nightly.sh illumos.sh------------------------------------------------------------------------------------------------------------------
As "10 steps to building ON on OpenIndiana" said:
Check the results (
mail_msglogfile should be about 2Kb small in size and contain no errors/warnings; if it does – research the biggernightly.logto see what went wrong in your build).May be I succeeded in building illumos, didn't I?
and then I used this command:
./usr/src/tools/scripts/onu-t nightly-`date +%Y-%m-%d` -d $PWD/packages/i386/nightlyto install the nightly build.
When installation finished, I restart my computer. I was happy to see a new item appears on grub:nightly-2012-1-13.
I got into the new system. Still i found that the golden bird logo instead of the Oi logo.
May i succeeded?
Did i switched to the new kernel i just built?
if yes how can I know the information about the new kernel?
uname -a shows that it is still openindiana. I was disturbed...........
if not i am eager to know the things that i have missed....
I am looking forward to your reply.
Thanks very much.
Jan 17, 2013
Joshua M. Clulow
Hey,
First up, I think it's probably best to ask these sorts of questions on the illumos-developer mailing list, where it will receive the widest qualified readership.
I suspect you have missed setting
ONNV_BUILDNUMin yourillumos.shenvironment file. That would preventonufrom upgrading to your newly built packages, because IPS does not believe them to be newer than what's on your system. If you can paste your environment file into http://gist.github.com or some other pastebin, then we can take a look.Cheers.
Jan 20, 2013
Raven
Thank you. And i am sorry to reply here. I will ask this question on the mail list soon .
Here is my illumos.sh.
https://gist.github.com/4578234
Please take a look.
=======================================================================
root@openindiana:~/illumos/code/illumos-gate# pkg info osnet-incorporation | grep Branch:
Branch: 0.151.1.5
root@openindiana:~/illumos/code/illumos-gate#
and ONNV_BUILDNUM=152
=======================================================================
May be it's just ok...
Feb 05, 2013
cxu
Hi all, although maybe it's better not question here, but I've meet a problem seems to be general.
I just wanna build illumos kernel in Openindiana 5.11 oi_151a7 i86pc i386 and etc. And setup step by step just as the article desc and get the log Error says:
/usr/sfw/bin/gcc
cc1: error: unrecognized command line option "-Wno-missing-field-initializers"
cc1: error: unrecognized command line option "-Wno-type-limits"
and so on.
I guess this maybe the error case by using the system default gcc version installed by pkg install step as the guide first noted, but I've got no gcc setup in illumos.sh. Anybody know how to setup gcc build with Sunstudio 12 compiler and Sunstudio 12u1 lint?
Thx
Feb 05, 2013
Joshua M. Clulow
Hi there,
It is best to ask these sorts of questions on the Mailing Lists. As this is a question related to building and developing illumos, it would probably be best to send it to the illumos-developer list.
Thanks.
Feb 05, 2013
Raven
hi cxu
It is best to ask these sorts of questions on the Mailing Lists.
If you have "/opt/gcc/4.4.4" on your openindiana, try add the following to your illumos.sh
----------------------------------------------------------------
GCC_ROOT=/opt/gcc/4.4.4
export GCC_ROOT
CW_GCC_DIR=${GCC_ROOT}/bin
export CW_GCC_DIR
-----------------------------------------------------------------
good luck