[HN Gopher] Revisiting the NetBSD Build System
___________________________________________________________________
Revisiting the NetBSD Build System
Author : abhi9u
Score : 131 points
Date : 2024-12-28 12:08 UTC (4 days ago)
(HTM) web link (blogsystem5.substack.com)
(TXT) w3m dump (blogsystem5.substack.com)
| kev009 wrote:
| It's hard to overstate how awesome build.sh is. If you have some
| powerful desktop/laptop running virtually any modern POSIX OS,
| you can easily build for an embedded board like an RPi or
| Beagelboard, obscure retro targets, or standard systems all the
| same. The closest thing is maybe Yocto Linux, but a whole lot
| easier to use and understand.
| dgfitz wrote:
| My yocto linux builds have a single entry point that is a
| build.sh. And they're like 20 lines.
| johnklos wrote:
| I've heard this about various Linux distros, but every time
| I've tried it has never been as simple as people say it
| should be.
|
| I assume your twenty lines has customizations. How do you
| rebuild the OS and kernel the simplest way possible?
| idatum wrote:
| If you run older hardware you realize quickly how significant
| it is to be able to do cross builds with build.sh. I came
| across this post today that highlights this!
|
| https://zia.io/objects/c4b825f9-8c57-4b86-a108-af869dfbcb10
|
| > How long would you imagine it might take to compile NetBSD 10
| from source on real m68k hardware? Earlier this year I wanted
| to find out, so I set up a Macintosh to try it.
|
| > The toolchain, OS and installation sets started on 16-March
| and finished on 10-May:
|
| > build.sh started: Sat Mar 16 17:04:20 UTC 2024
|
| > build.sh ended: Fri May 10 00:35:54 UTC 2024
|
| > 4692724.22 real 3810544.56 user 700310.18 sys
| kstrauser wrote:
| I misread that. It started on Mar 16 and ended on Mar 10? How
| did that OHHHHhhhh...
| actionfromafar wrote:
| That's not so bad! :-D
| jmclnx wrote:
| I just updated pkgsrc from 2024Q3 to 2024Q4 for amd64 and i386,
| very easy.
|
| I never built NetBSD because I never had the need to do that. But
| from what I read its cross-compiling works very well.
| theamk wrote:
| > NetBSD build system allows you to build the full OS from
| scratch, on pretty much any host POSIX platform, while targeting
| any hardware architecture supported by NetBSD. All without root
| privileges.
|
| That seems fairly standard to me though? Yocto, buldroot, many
| other embedded-oriented systems provide that and more.
| plorkyeran wrote:
| It's definitely what I would consider the basic expectations
| for a build system (why would you even need root to compile an
| OS?), but it's not something that most non-embedded-focused
| distributions deliver.
| musicale wrote:
| > why would you even need root to compile an OS
|
| Usually it's to make it easier dealing with file system
| ("disk") image files, which may require root privileges to
| mount and use with regular programs (though FUSE and similar
| subsystems can help.) In a mounted filesystem, root
| privileges may be required to set permission bits like
| setuid.
|
| The NetBSD toolchain probably includes utilities to make it
| easy to copy data in and out of file system images, ideally
| concurrently and without corruption.
| cperciva wrote:
| In addition to building filesystem images, a common use of
| root for operating system building is to chroot into a
| "clean" environment to avoid environmental corruption. (In
| general, chroot is reserved to uid 0 due to issues with
| setuid binaries -- on some systems chroot can be made
| available to non-root users by turning off setuid
| behaviour.)
| Koshkin wrote:
| The option -U lets you build in the unprivileged mode.
| deaddodo wrote:
| Yeah, I feel like anyone making this statement hasn't done
| any sort of wide cross-compilation in the past, let alone of
| an entire OS.
|
| It _should_ be a basic expectation, but most certainly isn 't
| one in the real-world. Especially with stuff like GCC2 Haiku,
| which requires an old obscure GCC version for building ABI
| compatible images.
| jmmv wrote:
| I didn't know about Yocto, but reading through its
| documentation, it looks far more complex than NetBSD's
| build.sh. And then, I read:
|
| > If the machine you want to use Yocto Project on to build an
| image (Build Host) is not a native Linux system, you can still
| perform these steps by using CROss PlatformS (CROPS) and
| setting up a Poky container. ... > With CROPS, which leverages
| Docker Containers, you can create a Yocto Project development
| environment that is operating system agnostic. You can set up a
| container in which you can develop using the Yocto Project on a
| Windows, Mac, or Linux machine.
|
| ... which is not close to what NetBSD's build system does, like
| at all.
|
| As for buildroot: "Buildroot is designed to run on Linux
| systems." (a "red flag") and the list of host dependencies to
| install is pretty large, which is also different from NetBSD's
| build.
|
| Plus Buildroot and "other embedded-oriented systems" are, well,
| something specifically designed to build embedded system images
| with Linux, not a "standard" Unix-like OS that happens to have
| a build system that works well for embedded. A big plus for BSD
| is its monorepo style of development: customizing and patching
| the system is trivial. With buildroot, well, you have Linux's
| hodgepodge style of development, so picking and choosing
| components is simple, but modifying any of them is hard.
|
| So what NetBSD's build system offers doesn't "seem fairly
| standard" to me. Definitely not the "run on pretty much any
| host POSIX platform", which is not common. And when you involve
| Docker in the picture, I also say that other systems fail the
| test of "all without root".
| plagiarist wrote:
| I really enjoyed reading this. And it is too relatable that they
| would detour from the project they want to work on to port the
| build over to Bazel.
___________________________________________________________________
(page generated 2025-01-01 23:01 UTC)