Mercurial > hg > 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 wrap: on
line diff
--- a/www/news.html Sun Sep 05 00:08:47 2010 -0500 +++ b/www/news.html Sun Sep 05 00:47:04 2010 -0500 @@ -6,6 +6,254 @@ <b><h1>News</h1></b> <hr> +<h2><a name="09-05-2010" />September 5, 2010</h2> +<p>There's an old saying, "eventually you need to shoot the +engineers and go into production". Aboriginal Linux can now bootstrap a +native development environment on an arbitrary target, and build packages +under the result. There's always more to do, but it does what it set +out to do. And thus:</p> + +<p><a href=downloads/aboriginal-1.0.0.tar.bz2>Aboriginal Linux 1.0</a> is out, +based on <a href=http://impactlinux.com/hg/firmware/shortlog/1192>hg commit +1192</a>, using Linux 2.6.35, uClibc 0.9.31, and BusyBox 1.17.1.</p> + +<p>Yes, it's been over five months since the last release. I didn't want to +ship yet another intermediate release before doing 1.0, but I was trying +to run out of todo items before shipping. (Yeah, I should know better. +Sorry for the delay.)</p> + +<p>The following are release notes, not proper documentation. Proper +documentation (including a introduction to the whole thing) is the next +big TODO item.</p> + +<b><h3>Targets</h3></b> + +<p>The arm, mips, powerpc, and x86 targets all work. Sparc works statically +linked, but dynamic linking is still broken. Khem Raj fixed mips64 dynamic +linking, but the native compiler still doesn't work. The m68k target builds +again, although QEMU still doesn't emulate it. The sh4 target and big endian +arm are are still broken.</p> + +<p>The snapshots page needs updating. The documentation needs updating.</p> + +<b><h3>System image updates</h3></b> + +<p>The native-build.sh script moved into each system image. This means you +can now download a system image tarball and a control image, then run a +native build without any dependencies on the Aboriginal Linux build scripts. +This script is a wrapper around dev-environment.sh which takes one argument, +the name of the control image file.</p> + +<p>The build only puts dev-environment.sh and run-from-build.sh into a +system image when the system image includes native development tools.</p> + +<b><h3>Control Images</h3></b> + +<p>This release adds prebuilt binary build control images, generated +by more/build-control-images.sh and shipped in the +<a href=downloads/binaries/control-images>control-images</a> directory. +These are squashfs filesystems containing source code and an init script to +build it and upload it to the host (using the $FTP_SERVER and $FTP_PORT +variables, set by native-build.sh).</p> + +<p>If these +images are loaded into /dev/hdc of the emulated system, the system image's +init script will mount that on /mnt and run /mnt/init instead of a shell +prompt, so the build is completely automated.</p> + +<p>Control images are provided to build hello world, build static dropbear +and strace binaries, run the busybox test suite, and an in-progress script +to bootstrapping Gentoo Stage 1 does about the first 2/3 of the job.</p> + +<b><h3>Root filesystem improvements</h3></b> + +<p>The root filesystem broke into two stages: simple-root-filesystem just +contains a simple "defconfig busybox plus uClibc" system, enough to boot +to a shell prompt. The native-compiler stage is like cross-compiler only +unprefixed, built to run on the target, and including make, bash, and +distcc. The root-filesystem stage combines the two into a single root +filesystem with native development tools.</p> + +<p>If the root filesystem is mounted read only, the init script will now +mount a tmpfs on /home if there's no /dev/hdb to provide writeable scratch +space. Chroot environments should now use Google's 8.8.8.8 nameserver +by default. The distcc binaries moved out of /bin to the /distcc directory.</p> + +<p>The "oneit" binary became a standalone program, and uses the / directory +as PID 1's working directory, allowing you to umount /home if necessary. +Toybox's "patch" command went upstream into busybox, and busybox's defconfig +once again supports netcat server mode, so toybox was removed. We're now +using a defconfig busybox, so configuring it properly is their problem.</p> + +<b><h3>Build scripts </h3></b> + +<p>The kernel configuration got collated to sources/baseconfig-linux (just +like baseconfig-uClibc), and the various packages were migrated to use +that. The kernel config is now the baseconfig plus the settings +entry $LINUX_CONFIG. You can still supply a miniconfig-linux file to +override this, and some architectures still do that. The ones that have +been migrated to use a shared baseconfig are a lot more regular now, +and the differences between architectures broken out and isolated.</p> + +<p>The build stages were broken up to be more granular. The root-filesystem.sh +stage now merely collates the output of two previous stages: +simple-root-filesystem.sh (which produces just enough of a root filesystem +to boot to a shell prompt, based on uClibc and busybox plus a few init scripts +and config files), and native-compiler.sh (a portable native toolchain).</p> + +<p>The system-image.sh stage now generates the dev-environment.sh script. +It only puts dev-environment.sh and native-build.sh scripts in the tarball +when NO_NATIVE_COMPILER is blank (and thus the build includes native +development tools), or if root-filesystem isn't available in which case +it'll automatically use simple-root-filesystem.</p> + +<p>Several more package builds were moved to sources/sections.</p> + +<p>The new "more" subdirectory collects together all the user-runnable +scripts that aren't build stages. (Many of these were previously in +sources/more.) New scripts in this directory include:</p> + +<ul> +<li>Scripts to run newly built system images out of the build directory +("run-emulator-from-build.sh $ARCH", "dev-environment-from-build.sh $ARCH", +and "native-build-from-build.sh")</li> + +<li>test.sh - Wrapper script to run commands in the build environment, with +read_arch_dir loaded. Useful for things like +"STAGE_NAME=simple-cross-compiler more/test.sh sparc build_stage uClibc", +or to dump the build context's environment variables ala "more/test.sh env"</li> + +<li>timeout.sh $SECONDS command... - Wrapper to run a child process and +kill it if it doesn't produce a line of output for $SECONDS seconds.</li> + +<li>build-control-images.sh - build all control images from sources/native-builds.</li> + +<li>for-each-target.sh - iterage through every defined target architecture +and run a command.</li> +</ul> + +<b><h3>Website</h3></b> + +<p>A new cron job is populating the +<a href=downloads/binaries/snapshots>snapshots</a> directory. Currently only +the stable versions, but the unstable versions should wander back in +eventually. (When the bisectinate and migrate-kernel scripts catch up to +what they need to do to properly test unstable packages.)</p> + +<p>More documentation: The "about" page got redone, and the FAQ was fluffed +out with a new debugging section. Michael S. Zick wrote up mips docs for the +architecture page, and the build scripts grew even more comments.</p> + +<b><h3>General Infrastructure</h3></b> + +<p>The control image generation was upgraded so each control image +source can have its own patch directory and file directory. (This needs +more work.)</p> + +<p>Environment variable sanitization: the sanitize_environment function +unsets any environment variable it doesn't recognize, either from a whitelist +or from config. Clearing all unrecognized environment variables insulates +the build from some of the strage environments out there. To disable this +behavior, export NO_SANITIZE_ENVIRONMENT=1.</p> + +<p>New config variables:</p> + +<ul> +<li>STATIC_CC_HOST became CROSS_HOST_ARCH, set that and second stage cross +compiler gets built.</li> + +<li>The new ALLOW_PATCH_FAILURE=1 variable continues despite a patch failing to +apply.</li> + +<li>NO_HOST_TOOLS=1 tells build.sh to skip the host tools step, which is seldom +a good idea but there you have it. The new HOST_EXTRA is an equally horrible +idea, but if you feel the need it's a list of extra commands to pass through +from the host $PATH.</p> + +<li>NO_CPLUSPLUS=1 tells it not to add C++ support in the toolchains it +builds.</p> + +<li>NO_CLEANUP isn't a new variable, but you can now set this for entire +builds and it should work.</li> +</ul> + +<p>ccwrap improvements: Handle unexported $PATH better. It doesn't need to +search $PATH when argc[0] is a path (either absolute or relative to the current +directory). Also use Scrt1.o when building a shared library. (Oddly this +never caused a problem before, but do the right thing anyway.)</p> + +<p>Upgrades to BUILD_STATIC: it now takes a comma separated list of packages, +with the special value "all" to build everything static, and "none" to build +nothing static. The default is to build static versions of busybox and the +toolchain packages (gcc, binutils, make, and ccwrap) both due to the increased +performance this provides under qemu (which has to repeatedly re-translate +executable code pages that modify themselves, such as when dynamic linking +patches per-process jump addresses), and also due to the increased portability +this provides the native compiler tarball.</p> + +<p>(The host-tools stage always builds dynamic packages, because the glibc +maintainer has a personal dislike of static linking, meaning glibc's static +linking support (in addition to creating 400k "hello world" binaries) is both +broken[LINK] and deprecated[LINK]. Some distros have even taken to breaking +out the *.a format libraries used for static linking into a separate package, +and not installing them by default. The host-tools stage now tests for this, +and refuses to continue in a dynamic-only build environment unless you set +BUILD_STATIC=none. You can rebuild under the resulting target system to +natively compile static binaries, which uClibc supports quite well, but you +can't generate them from the host.)</p> + +<p>The old FROM_ARCH is now HOST_ARCH, and the infrastructure using it +(cross-compiler.sh and native-compiler.sh) has been cleaned up. The +HOST_UTILS variable was also removed, that's now built for the full +cross and native compilers, but not the simple cross compiler.</p> + +<p>The more/smoketest.sh file no longer creates hdb.img.</p> + +<p>The host-tools stage has been upgraded to work around the utter stupidity of +Ubuntu 10.04, which turned "gcc" into a perl script. (Yes really. No, I don't +know what they were smoking.)</p> + +<p>Build zlib in host-tools (for squashfs) and in static-tools for dropbear's +-C. This is necessary for reproducing the build under a system-image, because +the default system image type (squashfs) requires zlib to build.</p> + +<p>Update the command prompt in system images to show the amount of +parallelism available via distcc. (When it says 1 you haven't got +distcc, and when it says a number greater than that you have.) +The prompt now looks like:</p> +<blockquote><pre>(powerpc:4) /home #</pre></blockquote> + +<p>The make, bash, and distcc builds are now part of the native-compiler stage +(and their build scripts moved to sources/sections). This means that a native +toolchain now includes make, because it's hard to build make without make. +This stage also records the uClibc and linux config files for posterity.</p> + +<p>The build was weaned off of toybox. (Broke out oneit, sent patch upstream +to busybox, and got netcat fixed in defconfig so native-build.sh could use +it.)</p> + +<p>Several small bugfixes and cosmetic cleanups. For example, we now delete +empty build/temp-* directories when we're done with them, and several +config options such as NO_NATIVE_COMPILER and NO_CLEANUP should be more +reliable now. Don't build hello-dynamic on a BUILD_STATIC=all system. +Clean up debris files the kernel's headers_install leaves lying around. +Minor upgrades to FORK=1 support, and QUIET is now part of FORK instead +of a separate control. Generating a package manifest should no +longer produce error messages. Empty temp directories get deleted on the +way out. Better support for building older tools as alt-packages (tested +binutils 2.14 and gcc 3.4). Comment out default UNSTABLE= URLs in download.sh, +supply your own if you want that. Binutils build now honors existing $CFLAGS +(if any). The dienow error message goes to stderr. More reliably track +package cache state when patches fail to apply. Simplify system-image +build (don't try to package root filesystem and build kernel in parallel +anymore, squashfs and make both have internal SMP support). BUILD_VERBOSE +is now more verbose. Reliability improvement for record-commands.sh. +New shell functions blank_workdir and extract_package. Consistently +use name-name in scripts and name_name in functions.</p> + +<p>It's been a long 5 months...</p> + +<hr> <h2><a name="05-02-2010" />May 2, 2010</h2> <p>The name of the project is changing from Firmware Linux to Aboriginal Linux. The new URL is "http://impactlinux.com/aboriginal".</p>