aboriginal

changeset 1237:479bcbb2775e 1.0

Screw it: cut a release and fix it all up later.
author Rob Landley <rob@landley.net>
date Sun, 05 Sep 2010 00:47:04 -0500
parents 75ecd2cf6068
children 61b1511f806a
files www/news.html
diffstat 1 files changed, 248 insertions(+), 0 deletions(-) [+]
line diff
     1.1 --- a/www/news.html	Sun Sep 05 00:08:47 2010 -0500
     1.2 +++ b/www/news.html	Sun Sep 05 00:47:04 2010 -0500
     1.3 @@ -6,6 +6,254 @@
     1.4  <b><h1>News</h1></b>
     1.5  
     1.6  <hr>
     1.7 +<h2><a name="09-05-2010" />September 5, 2010</h2>
     1.8 +<p>There's an old saying, "eventually you need to shoot the
     1.9 +engineers and go into production".  Aboriginal Linux can now bootstrap a
    1.10 +native development environment on an arbitrary target, and build packages
    1.11 +under the result.  There's always more to do, but it does what it set
    1.12 +out to do.  And thus:</p>
    1.13 +
    1.14 +<p><a href=downloads/aboriginal-1.0.0.tar.bz2>Aboriginal Linux 1.0</a> is out,
    1.15 +based on <a href=http://impactlinux.com/hg/firmware/shortlog/1192>hg commit
    1.16 +1192</a>, using Linux 2.6.35, uClibc 0.9.31, and BusyBox 1.17.1.</p>
    1.17 +
    1.18 +<p>Yes, it's been over five months since the last release.  I didn't want to
    1.19 +ship yet another intermediate release before doing 1.0, but I was trying
    1.20 +to run out of todo items before shipping.  (Yeah, I should know better.
    1.21 +Sorry for the delay.)</p>
    1.22 +
    1.23 +<p>The following are release notes, not proper documentation.  Proper
    1.24 +documentation (including a introduction to the whole thing) is the next
    1.25 +big TODO item.</p>
    1.26 +
    1.27 +<b><h3>Targets</h3></b>
    1.28 +
    1.29 +<p>The arm, mips, powerpc, and x86 targets all work.  Sparc works statically
    1.30 +linked, but dynamic linking is still broken.  Khem Raj fixed mips64 dynamic
    1.31 +linking, but the native compiler still doesn't work.  The m68k target builds
    1.32 +again, although QEMU still doesn't emulate it.  The sh4 target and big endian
    1.33 +arm are are still broken.</p>
    1.34 +
    1.35 +<p>The snapshots page needs updating.  The documentation needs updating.</p>
    1.36 +
    1.37 +<b><h3>System image updates</h3></b>
    1.38 +
    1.39 +<p>The native-build.sh script moved into each system image.  This means you
    1.40 +can now download a system image tarball and a control image, then run a
    1.41 +native build without any dependencies on the Aboriginal Linux build scripts.
    1.42 +This script is a wrapper around dev-environment.sh which takes one argument,
    1.43 +the name of the control image file.</p>
    1.44 +
    1.45 +<p>The build only puts dev-environment.sh and run-from-build.sh into a
    1.46 +system image when the system image includes native development tools.</p>
    1.47 +
    1.48 +<b><h3>Control Images</h3></b>
    1.49 +
    1.50 +<p>This release adds prebuilt binary build control images, generated
    1.51 +by more/build-control-images.sh and shipped in the
    1.52 +<a href=downloads/binaries/control-images>control-images</a> directory.
    1.53 +These are squashfs filesystems containing source code and an init script to
    1.54 +build it and upload it to the host (using the $FTP_SERVER and $FTP_PORT
    1.55 +variables, set by native-build.sh).</p>
    1.56 +
    1.57 +<p>If these
    1.58 +images are loaded into /dev/hdc of the emulated system, the system image's
    1.59 +init script will mount that on /mnt and run /mnt/init instead of a shell
    1.60 +prompt, so the build is completely automated.</p>
    1.61 +
    1.62 +<p>Control images are provided to build hello world, build static dropbear
    1.63 +and strace binaries, run the busybox test suite, and an in-progress script
    1.64 +to bootstrapping Gentoo Stage 1 does about the first 2/3 of the job.</p>
    1.65 +
    1.66 +<b><h3>Root filesystem improvements</h3></b>
    1.67 +
    1.68 +<p>The root filesystem broke into two stages: simple-root-filesystem just
    1.69 +contains a simple "defconfig busybox plus uClibc" system, enough to boot
    1.70 +to a shell prompt.  The native-compiler stage is like cross-compiler only
    1.71 +unprefixed, built to run on the target, and including make, bash, and
    1.72 +distcc.  The root-filesystem stage combines the two into a single root
    1.73 +filesystem with native development tools.</p>
    1.74 +
    1.75 +<p>If the root filesystem is mounted read only, the init script will now
    1.76 +mount a tmpfs on /home if there's no /dev/hdb to provide writeable scratch
    1.77 +space.  Chroot environments should now use Google's 8.8.8.8 nameserver
    1.78 +by default.  The distcc binaries moved out of /bin to the /distcc directory.</p>
    1.79 +
    1.80 +<p>The "oneit" binary became a standalone program, and uses the / directory
    1.81 +as PID 1's working directory, allowing you to umount /home if necessary.
    1.82 +Toybox's "patch" command went upstream into busybox, and busybox's defconfig
    1.83 +once again supports netcat server mode, so toybox was removed.  We're now
    1.84 +using a defconfig busybox, so configuring it properly is their problem.</p>
    1.85 +
    1.86 +<b><h3>Build scripts </h3></b>
    1.87 +
    1.88 +<p>The kernel configuration got collated to sources/baseconfig-linux (just
    1.89 +like baseconfig-uClibc), and the various packages were migrated to use
    1.90 +that.  The kernel config is now the baseconfig plus the settings
    1.91 +entry $LINUX_CONFIG.  You can still supply a miniconfig-linux file to
    1.92 +override this, and some architectures still do that.  The ones that have
    1.93 +been migrated to use a shared baseconfig are a lot more regular now,
    1.94 +and the differences between architectures broken out and isolated.</p>
    1.95 +
    1.96 +<p>The build stages were broken up to be more granular.  The root-filesystem.sh
    1.97 +stage now merely collates the output of two previous stages:
    1.98 +simple-root-filesystem.sh (which produces just enough of a root filesystem
    1.99 +to boot to a shell prompt, based on uClibc and busybox plus a few init scripts
   1.100 +and config files), and native-compiler.sh (a portable native toolchain).</p>
   1.101 +
   1.102 +<p>The system-image.sh stage now generates the dev-environment.sh script.
   1.103 +It only puts dev-environment.sh and native-build.sh scripts in the tarball
   1.104 +when NO_NATIVE_COMPILER is blank (and thus the build includes native
   1.105 +development tools), or if root-filesystem isn't available in which case
   1.106 +it'll automatically use simple-root-filesystem.</p>
   1.107 +
   1.108 +<p>Several more package builds were moved to sources/sections.</p>
   1.109 +
   1.110 +<p>The new "more" subdirectory collects together all the user-runnable
   1.111 +scripts that aren't build stages.  (Many of these were previously in
   1.112 +sources/more.)  New scripts in this directory include:</p>
   1.113 +
   1.114 +<ul>
   1.115 +<li>Scripts to run newly built system images out of the build directory
   1.116 +("run-emulator-from-build.sh $ARCH", "dev-environment-from-build.sh $ARCH",
   1.117 +and "native-build-from-build.sh")</li>
   1.118 +
   1.119 +<li>test.sh - Wrapper script to run commands in the build environment, with
   1.120 +read_arch_dir loaded.  Useful for things like
   1.121 +"STAGE_NAME=simple-cross-compiler more/test.sh sparc build_stage uClibc",
   1.122 +or to dump the build context's environment variables ala "more/test.sh env"</li>
   1.123 +
   1.124 +<li>timeout.sh $SECONDS command... - Wrapper to run a child process and
   1.125 +kill it if it doesn't produce a line of output for $SECONDS seconds.</li>
   1.126 +
   1.127 +<li>build-control-images.sh - build all control images from sources/native-builds.</li>
   1.128 +
   1.129 +<li>for-each-target.sh - iterage through every defined target architecture
   1.130 +and run a command.</li>
   1.131 +</ul>
   1.132 +
   1.133 +<b><h3>Website</h3></b>
   1.134 +
   1.135 +<p>A new cron job is populating the
   1.136 +<a href=downloads/binaries/snapshots>snapshots</a> directory.  Currently only
   1.137 +the stable versions, but the unstable versions should wander back in
   1.138 +eventually.  (When the bisectinate and migrate-kernel scripts catch up to
   1.139 +what they need to do to properly test unstable packages.)</p>
   1.140 +
   1.141 +<p>More documentation: The "about" page got redone, and the FAQ was fluffed
   1.142 +out with a new debugging section.  Michael S. Zick wrote up mips docs for the
   1.143 +architecture page, and the build scripts grew even more comments.</p>
   1.144 +
   1.145 +<b><h3>General Infrastructure</h3></b>
   1.146 +
   1.147 +<p>The control image generation was upgraded so each control image
   1.148 +source can have its own patch directory and file directory.  (This needs
   1.149 +more work.)</p>
   1.150 +
   1.151 +<p>Environment variable sanitization: the sanitize_environment function
   1.152 +unsets any environment variable it doesn't recognize, either from a whitelist
   1.153 +or from config.  Clearing all unrecognized environment variables insulates
   1.154 +the build from some of the strage environments out there.  To disable this
   1.155 +behavior, export NO_SANITIZE_ENVIRONMENT=1.</p>
   1.156 +
   1.157 +<p>New config variables:</p>
   1.158 +
   1.159 +<ul>
   1.160 +<li>STATIC_CC_HOST became CROSS_HOST_ARCH, set that and second stage cross
   1.161 +compiler gets built.</li>
   1.162 +
   1.163 +<li>The new ALLOW_PATCH_FAILURE=1 variable continues despite a patch failing to
   1.164 +apply.</li>
   1.165 +
   1.166 +<li>NO_HOST_TOOLS=1 tells build.sh to skip the host tools step, which is seldom
   1.167 +a good idea but there you have it.  The new HOST_EXTRA is an equally horrible
   1.168 +idea, but if you feel the need it's a list of extra commands to pass through
   1.169 +from the host $PATH.</p>
   1.170 +
   1.171 +<li>NO_CPLUSPLUS=1 tells it not to add C++ support in the toolchains it
   1.172 +builds.</p>
   1.173 +
   1.174 +<li>NO_CLEANUP isn't a new variable, but you can now set this for entire
   1.175 +builds and it should work.</li>
   1.176 +</ul>
   1.177 +
   1.178 +<p>ccwrap improvements: Handle unexported $PATH better.  It doesn't need to
   1.179 +search $PATH when argc[0] is a path (either absolute or relative to the current
   1.180 +directory).  Also use Scrt1.o when building a shared library.  (Oddly this
   1.181 +never caused a problem before, but do the right thing anyway.)</p>
   1.182 +
   1.183 +<p>Upgrades to BUILD_STATIC: it now takes a comma separated list of packages,
   1.184 +with the special value "all" to build everything static, and "none" to build
   1.185 +nothing static.  The default is to build static versions of busybox and the
   1.186 +toolchain packages (gcc, binutils, make, and ccwrap) both due to the increased
   1.187 +performance this provides under qemu (which has to repeatedly re-translate
   1.188 +executable code pages that modify themselves, such as when dynamic linking
   1.189 +patches per-process jump addresses), and also due to the increased portability
   1.190 +this provides the native compiler tarball.</p>
   1.191 +
   1.192 +<p>(The host-tools stage always builds dynamic packages, because the glibc
   1.193 +maintainer has a personal dislike of static linking, meaning glibc's static
   1.194 +linking support (in addition to creating 400k "hello world" binaries) is both
   1.195 +broken[LINK] and deprecated[LINK].  Some distros have even taken to breaking
   1.196 +out the *.a format libraries used for static linking into a separate package,
   1.197 +and not installing them by default.  The host-tools stage now tests for this,
   1.198 +and refuses to continue in a dynamic-only build environment unless you set
   1.199 +BUILD_STATIC=none.  You can rebuild under the resulting target system to
   1.200 +natively compile static binaries, which uClibc supports quite well, but you
   1.201 +can't generate them from the host.)</p>
   1.202 +
   1.203 +<p>The old FROM_ARCH is now HOST_ARCH, and the infrastructure using it
   1.204 +(cross-compiler.sh and native-compiler.sh) has been cleaned up.  The
   1.205 +HOST_UTILS variable was also removed, that's now built for the full
   1.206 +cross and native compilers, but not the simple cross compiler.</p>
   1.207 +
   1.208 +<p>The more/smoketest.sh file no longer creates hdb.img.</p>
   1.209 +
   1.210 +<p>The host-tools stage has been upgraded to work around the utter stupidity of
   1.211 +Ubuntu 10.04, which turned "gcc" into a perl script.  (Yes really.  No, I don't
   1.212 +know what they were smoking.)</p>
   1.213 +
   1.214 +<p>Build zlib in host-tools (for squashfs) and in static-tools for dropbear's
   1.215 +-C.  This is necessary for reproducing the build under a system-image, because
   1.216 +the default system image type (squashfs) requires zlib to build.</p>
   1.217 +
   1.218 +<p>Update the command prompt in system images to show the amount of
   1.219 +parallelism available via distcc.  (When it says 1 you haven't got
   1.220 +distcc, and when it says a number greater than that you have.)
   1.221 +The prompt now looks like:</p>
   1.222 +<blockquote><pre>(powerpc:4) /home #</pre></blockquote>
   1.223 +
   1.224 +<p>The make, bash, and distcc builds are now part of the native-compiler stage
   1.225 +(and their build scripts moved to sources/sections).  This means that a native
   1.226 +toolchain now includes make, because it's hard to build make without make.
   1.227 +This stage also records the uClibc and linux config files for posterity.</p>
   1.228 +
   1.229 +<p>The build was weaned off of toybox.  (Broke out oneit, sent patch upstream
   1.230 +to busybox, and got netcat fixed in defconfig so native-build.sh could use
   1.231 +it.)</p>
   1.232 +
   1.233 +<p>Several small bugfixes and cosmetic cleanups.  For example, we now delete
   1.234 +empty build/temp-* directories when we're done with them, and several
   1.235 +config options such as NO_NATIVE_COMPILER and NO_CLEANUP should be more
   1.236 +reliable now.  Don't build hello-dynamic on a BUILD_STATIC=all system.
   1.237 +Clean up debris files the kernel's headers_install leaves lying around.
   1.238 +Minor upgrades to FORK=1 support, and QUIET is now part of FORK instead
   1.239 +of a separate control.  Generating a package manifest should no
   1.240 +longer produce error messages.  Empty temp directories get deleted on the
   1.241 +way out.  Better support for building older tools as alt-packages (tested
   1.242 +binutils 2.14 and gcc 3.4).  Comment out default UNSTABLE= URLs in download.sh,
   1.243 +supply your own if you want that.  Binutils build now honors existing $CFLAGS
   1.244 +(if any).  The dienow error message goes to stderr.  More reliably track
   1.245 +package cache state when patches fail to apply.  Simplify system-image
   1.246 +build (don't try to package root filesystem and build kernel in parallel
   1.247 +anymore, squashfs and make both have internal SMP support).  BUILD_VERBOSE
   1.248 +is now more verbose.  Reliability improvement for record-commands.sh.
   1.249 +New shell functions blank_workdir and extract_package.  Consistently
   1.250 +use name-name in scripts and name_name in functions.</p>
   1.251 +
   1.252 +<p>It's been a long 5 months...</p>
   1.253 +
   1.254 +<hr>
   1.255  <h2><a name="05-02-2010" />May 2, 2010</h2>
   1.256  <p>The name of the project is changing from Firmware Linux to Aboriginal
   1.257  Linux.  The new URL is "http://impactlinux.com/aboriginal".</p>