NetBSD Planet


June 27, 2025

UnitedBSD Programs slower to start after upgrading from NetBSD 10.0 to 10.1

Hi everyone,

I recently upgraded from NetBSD 10.0 to 10.1 using the sysupgrade auto command. The upgrade went smoothly without any errors, but after rebooting I’ve noticed that some programs are taking longer than usual to start. This wasn’t happening back when I was running 10.0.

The most noticeable delay happens when I open uxterm — as you can see in the screenshot I attached, it can take up to seven seconds to launch, which feels like way too much for a terminal.

Also, as shown in the same image, I don’t have many processes running, and none of them are putting any real load on the CPU.

So my question is: could anyone point me in the right direction to figure out what’s causing this delay?

Thanks in advance for any help!


June 26, 2025

Pullup 10 [pullup-10 #1130] please pullup xorg-server 21.1.18
Pullup 9 [pullup-9 #1961] please apply patch to fix GCC deps vs r/o source
Pullup 9 [pullup-9 #1960] fix for pullup #1949: make ia64 buildable on new build cluster
Pullup 10 [pullup-10 #1129] fix for pullup #1111: make ia64 buildable on new build cluster
Stack Overflow Trying to build cmake - getting "defined in discarded section" when linking?

So to set the stage (and it's a strange stage...) this is on NetBSD, using pkgsrc, and on hppa architecture. I build this the same way on sparc without issue.

On hppa, I get:

`_ZL17__gthread_triggerv' referenced in section `.rodata._ZN20cmBasicUVPipeIStreamIcSt11char_traitsIcEED1Ev.cst4' of cmBinUtilsMacOSMachOOToolGetRuntimeDependenciesTool.o: defined in discarded section `.text._ZL17__gthread_triggerv[_ZN20cmBasicUVPipeIStreamIcSt11char_traitsIcEED1Ev]' of cmBinUtilsMacOSMachOOToolGetRuntimeDependenciesTool.o
`_ZL17__gthread_triggerv' referenced in section `.rodata._ZN20cmBasicUVPipeIStreamIcSt11char_traitsIcEED1Ev.cst4' of cmBinUtilsWindowsPEDumpbinGetRuntimeDependenciesTool.o: defined in discarded section `.text._ZL17__gthread_triggerv[_ZN20cmBasicUVPipeIStreamIcSt11char_traitsIcEED1Ev]' of cmBinUtilsWindowsPEDumpbinGetRuntimeDependenciesTool.o
`_ZL17__gthread_triggerv' referenced in section `.rodata._ZN20cmBasicUVPipeIStreamIcSt11char_traitsIcEED1Ev.cst4' of cmBinUtilsWindowsPEObjdumpGetRuntimeDependenciesTool.o: defined in discarded section `.text._ZL17__gthread_triggerv[_ZN20cmBasicUVPipeIStreamIcSt11char_traitsIcEED1Ev]' of cmBinUtilsWindowsPEObjdumpGetRuntimeDependenciesTool.o
`_ZL17__gthread_triggerv' referenced in section `.rodata._ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE1EE10_M_releaseEv.cst4' of cmConditionEvaluator.o: defined in discarded section `.text._ZL17__gthread_triggerv[_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE1EE10_M_releaseEv]' of cmConditionEvaluator.o
`_ZL17__gthread_triggerv' referenced in section `.rodata._ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE1EE10_M_releaseEv.cst4' of cmExecuteProcessCommand.o: defined in discarded section `.text._ZL17__gthread_triggerv[_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE1EE10_M_releaseEv]' of cmExecuteProcessCommand.o
`_ZL17__gthread_triggerv' referenced in section `.rodata._ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE1EE10_M_releaseEv.cst4' of cmFindPackageCommand.o: defined in discarded section `.text._ZL17__gthread_triggerv[_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE1EE10_M_releaseEv]' of cmFindPackageCommand.o
`_ZL17__gthread_triggerv' referenced in section `.rodata._ZN17cmFunctionBlockerD2Ev.cst4' of cmForEachCommand.o: defined in discarded section `.text._ZL17__gthread_triggerv[_ZN17cmFunctionBlockerD5Ev]' of cmForEachCommand.o
`_ZL17__gthread_triggerv' referenced in section `.rodata._ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE1EE10_M_releaseEv.cst4' of cmGeneratorExpressionDAGChecker.o: defined in discarded section `.text._ZL17__gthread_triggerv[_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE1EE10_M_releaseEv]' of cmGeneratorExpressionDAGChecker.o
`_ZL17__gthread_triggerv' referenced in section `.rodata._ZN20cmBasicUVPipeIStreamIcSt11char_traitsIcEED1Ev.cst4' of cmLDConfigLDConfigTool.o: defined in discarded section `.text._ZL17__gthread_triggerv[_ZN20cmBasicUVPipeIStreamIcSt11char_traitsIcEED1Ev]' of cmLDConfigLDConfigTool.o
`_ZL17__gthread_triggerv' referenced in section `.rodata._ZN20cmBasicUVPipeIStreamIcSt11char_traitsIcEED1Ev.cst4' of cmPlistParser.o: defined in discarded section `.text._ZL17__gthread_triggerv[_ZN20cmBasicUVPipeIStreamIcSt11char_traitsIcEED1Ev]' of cmPlistParser.o
`_ZL17__gthread_triggerv' referenced in section `.rodata._ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE1EE10_M_releaseEv.cst4' of cmake.o: defined in discarded section `.text._ZL17__gthread_triggerv[_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE1EE10_M_releaseEv]' of cmake.o
`_ZL17__gthread_triggerv' referenced in section `.rodata._ZN20cmBasicUVPipeIStreamIcSt11char_traitsIcEED1Ev.cst4' of cmcmd.o: defined in discarded section `.text._ZL17__gthread_triggerv[_ZN20cmBasicUVPipeIStreamIcSt11char_traitsIcEED1Ev]' of cmcmd.o
make: *** [Makefile:2: cmake] Error 1

It actually compiles everything just fine, it seems like right when it gets to creating "cmake" the binary it fails like this.

I see some other posts on here talking about changing the order in the linker section ?

I've posted to NetBSD mailing lists, as well as the CMake Discourse forum and no replies yet.

Any ideas would be greatly appreciated.


June 22, 2025

DragonFly BSD Digest Lazy Reading for 2025/06/22

I’m on the road as I type this – though I’ll be back by the time it’s posted – and so the links are without much comment.

Your unrelated comics link of the week: What’s the best comic I’ve ever read?  Lynda Barry is a master of the form.  (via)


June 21, 2025

Ruben Schade The end of Intel macOS

I don’t watch Apple keynotes or news that often anymore; the company hasn’t done anything worth paying attention to for years. But Ernie Smith caught this nugget at the end of the Platforms State of the Union talk:

macOS Tahoe will be the final release for Intel Macs. So if you’ve not done so already, now is a great time to help your users migrate to the Apple silicon versions of your apps.

I still bristle a bit when I hear desktop software referred to as “apps”. It reads as though they’re trivialising their complexity and importance; though maybe I’m just old fashioned.

But back to this announcement! We knew it was coming—we’ve known for many years at this point—it was just a question of when. Those of us who lived through past transitions knew that our older hardware was living on borrowed time from the moment the new architecture was announced. It’s not all bad though; replacing Mac OS X on my iBook G3 was my gateway into NetBSD! But I digress.

Still though, it’s interesting to look back at Apple’s foray into Intel Macs: what a curiosity they were. It was weird to me at the time that they they leaned so heavily on Intel’s name recognition, rather than saying they were moving to x86. It limited their potential collaboration with AMD for example, though I suppose they were still in the proverbial silicon woods at the time.

I had the first Intel MacBook Pro, as I mentioned in passing in a blog post about Mozilla software in 2006. I used it for years, but boy was it a rough machine. It had a loud, shrill whine when the CPU was idle, to the point where the “fix” was to run a shell script that chewed up just enough battery power to shut it up. I remember being on a call with an Apple rep in Crows Nest at the time, and they were well aware of the issue, and… unconcerned. Maybe they’d been to too many concerts and couldn’t hear it when it was reproduced for them. The cooling system was never great either; I ended up repasting it a few years later and the results were embarrassingly better. The screen inverter died, the MagSave port was flaky, both fans eventually needed replacing. My first, and one of my only YouTube videos, was about this! Very strange for a laptop that was never dropped or manhandled.

Just like the first Intel iMac, this MacBook Pro was also among the only Macs released with Intel’s Core Duo CPU; no, not Core 2 Duo. The Core Duo was 32-bit silicon, meaning we were artificially limited by what we could run almost from the start. I believe it was a year later when Apple released a Core 2 Duo-based machine, and we lost support for Mac OS X a few years later. Even many Apple fans seem oblivious to this oddity in Apple’s lineup, given how people thought Apple moved permanently to 64-bit CPUs starting with the G5.

That said, is a phrase with two words. Mac OS X had its golden era on the Intel platform. The best versions of the OS were released during this time, which perhaps says more about modern macOS than anything else. The last great, serviceable desktop Mac—the original Mac Pro—also sported Intel CPUs.

We’re spoiled in many ways with how good Apple Silicon MacBook hardware is now. No PC laptops that I’m aware of can match their weight, 2× HiDPI screens, battery life, and performance. I had an 11-inch Intel MacBook Air I miss dearly, but it was a slouch compared to my desktops at the time. If only their software and services didn’t continue to slide from okayish, to mediocre, to baffling, to embarrassing.

Anyway! A bit of a shaggy dog story about a retired architecture for your Sunday morning. Just be thankful I didn’t wax lyrical about PowerPC.

By Ruben Schade in Sydney, 2025-06-22.


June 18, 2025

UnitedBSD NetBSD mentorship availability

TLDR; Asking for a hand in learning how to develop and contribute to NetBSD

Hello, I have been trying to learn operating systems development for around five years. I felt comfortable enough in conceptual understanding to reach out for mentoring around a year ago. My goal is to find a small(er) community where the atmosphere might be more welcoming to newcomers than larger projects, and where I can potentially make a larger impact.

I started with illumos. Although I did some minor ports to software in order to try to contribute (and reached out to the community for help), I didn't get much traction. Afterwards, I reached out to the now-abandoned Minix3 project. I have a copy of The Minix Book and found its content to be rewarding. I reached out to some of the Minix3 developers, as well as the larger community, asking about the project and prospects of receiving some type of mentorship. Although I didn't find much in the way of community help as it seems the project has gone dormant, I did manage to do minor updates to the base Minix3 source tree in order to sync some of the outdated NetBSD tooling with new NetBSD tooling, since Minix version 3.2 and above lives in the NetBSD source tree. I applied old Minix3 patches to the new NetBSD tooling, using diffs/grep/find to locate Minix3 patches, and functionality which has changed between NetBSD releases. This also gave me a chance to familiarize myself with NetBSD.

Where I find myself now is at a point of conceptual understanding, lacking clarity and understanding when looking at the NetBSD repository [or any large OS repository for that matter]. I understand the layout and purposes of the source tree at varying levels, comparing what I see in the source tree against the concepts I learned in materials I have read. I find it difficult to modify code -- I feel like seeing someone else doing this would be very beneficial, and can testify to how helpful mentorship in any capacity can be.

I would really appreciate some newcomer-friendly instruction. My courses don't cover this area and I have gaps in understanding that I'm eager to close. I would like to see the methodology, tooling, and steps used by others in order to have a starting point. Ideally, I'd like to arrive at a point where I can bootstrap this knowledge and begin contributing to NetBSD.

Thanks for your consideration. 🙂

/r/NetBSD NetBSD on Olimex Teres-I?

Is there is any way to install NetBSD on Olimex laptop? I have tried this iso list:

https://preview.redd.it/ba8y9t6bhm7f1.png?width=1858&format=png&auto=webp&s=8d79067898630692fe8efe086d895eef0c3b6175

https://preview.redd.it/qt0krtychm7f1.png?width=1782&format=png&auto=webp&s=58b46c73a346c7318ff199cac9d1eaa2689aa567

But I did not have find anything related to Olimex Teres. No iso, no DTB, probably no drivers. I know installation is possible (saw a video in internet), but there is no simple way, right?)

p.s. I heard about patch with support of Olimex Teres, but did not find anything.

https://www.google.com/search?q="netbsd"+"olimex"+"teres"

submitted by /u/Ivbroe
[link] [comments]

June 17, 2025

/r/NetBSD NetBSD mentorship availability

Hello, I didn't see any explicit rules about asking for mentorship so I'll ask.

TLDR; Can someone give me a hand along the lines of mentorship?

I have been trying to learn operating systems for around five years. I felt comfortable enough in conceptual understanding to reach out for mentoring or learning opportunities around a year ago. My goal was/is to find a smaller community where the atmosphere might be more welcoming to newcomers than a larger community, and where I can make a larger impact. I started with illumos. Although I did some minor ports to software and had hoped to prove myself to a point of receiving some help to grow and contribute more, I didn't find this opportunity. Afterwards, I reached out to the now-abandoned Minix3 project. I have a copy of The Minix Book and found its content to be rewarding. I reached out to some of the Minix devs, as well as the Minix community, asking about the project and prospects of receiving mentorship. While waiting to hear back, I began to do minor updates to its code in order to sync it with the NetBSD-current tree (Minix >= 3.2 uses the NetBSD source tree and patches the NetBSD tooling and libraries). This also gave me a chance to familiarize myself with NetBSD.

I find not only the technical goals of NetBSD to be interesting, but also the sort of 'downstream' effects of these goals. It seems that NetBSD is also easier to reason about in regards to its structure and code, at least based on my limited sample of searching through the other BSD repositories.

Where I find myself now is at a point of conceptual understanding, but feeling somewhat lost when looking at the NetBSD repository. My courses don't cover this area, either. I understand the layout and purposes at varying levels. I have more difficulty when I attempt to modify code -- I feel like seeing someone else doing this would be highly beneficial, and can testify to how helpful mentorship, even in limited capacity, has proven to be in other areas which I've had issues learning.

I would really appreciate some newcomer-friendly instruction. I would also like to see the methodology and tooling used as to have a starting point. Thanks for your consideration :)

submitted by /u/laughinglemur1
[link] [comments]
/r/NetBSD Why so hostile to FDE?

You know when ChatGPT itself admits this lmfao. Great OS otherwise but this is absolutely a dealbreaker so I am going back to OpenBSD.

submitted by /u/zenithv999
[link] [comments]

June 16, 2025

/r/NetBSD Making sense out of 'files.*' configuration files

I want to create an I2C driver for the Amlogic Meson platform, so I'm trying to find my way into the kernel source tree. One thing I've found is that I must add my new C source to sys/arch/arm/amlogic/files.meson.

I've tried to find inspiration in sys/arch/arm/rockchip/files.rockchip where I've found the following lines:

device rkiic: i2cbus, i2cexec attach rkiic at fdt with rk_i2c file arch/arm/rockchip/rk_i2c.c rk_i2c 

Could someone explain me what this means?

submitted by /u/1r0n_m6n
[link] [comments]

June 14, 2025

UnitedBSD What could cause NPF NAT to suddenly quit?

A couple of weeks ago I built a NAT router/gateway/firewall with a RockPro64 running NetBSD 10.1 and using NPF. After some frustration I started to better understand NPF and had a lot of fun making this work. So for at least a week, this RockPro64 has been idling along, routing packets galore. Tonight, my wife was streaming a video from some proprietary service, watching a graduation ceremony. There wasn't anything else significant happening on our LAN. Suddenly NAT wasn't forwarding packets anymore. Everything else was working except LAN devices could not see the WAN. All 6 CPUs on the RockPro64 were at idle and RAM usage was low. Restarting NPF didn't solve the problem, as expected. Removing and re-initialising the WAN interface didn't help. The only thing that helped was rebooting the RockPro64.

What could cause this, or how could I have determined what caused it?


June 13, 2025

/r/NetBSD NetBSD and Amiga

I saw there is a Amiga port of NetBSD, but i'm curious if anyone has done this on a PiStorm accelerated Amiga 500?

submitted by /u/ut316ab
[link] [comments]

June 07, 2025

Pullup 10 [pullup-10 #1128] additional viaide(4) improvements
Pullup 9 [pullup-9 #1959] additional viaide(4) improvements

June 06, 2025

Ruben Schade Being thankful for tech that helped during Covid

Last week I mentioned we’d been off with the flu. Not to get all Malcolm Gladwell on you, but turns out it was also Covid; in particular that new strain that’s sweeping all over the place. Fun! I said in that post that it had taken us out “worse than Covid did”… little did I know at the time.

My brain is finally starting to come back online having been stuck at the human equivalent of an fsck> prompt for a couple of weeks. Alas, my brain does not use OpenZFS, so sometimes it loses data and functions based on external stimuli. If only I could issue a brain scrub and be done with it; instead I have to wait until the UFS in my grey matter is reconstituted. Good thing I keep a… journal!

It got me thinking about some of the tech that helped us through it. It’s easy to be cynical in the current world, but our recovery was made immeasurably better thanks to some basic things—and the people behind it—that I wanted to thank.

In no particular order:

I’m sure I’m ignoring, forgetting, or otherwise failing to mention many more. Those things were also great.

By Ruben Schade in Sydney, 2025-06-07.

Pullup pkgsrc [pullup-pkgsrc #6974] [[email protected]: CVS commit: pkgsrc/databases]
Pullup pkgsrc [pullup-pkgsrc #6973] [[email protected]: CVS commit: pkgsrc/databases]
Pullup pkgsrc [pullup-pkgsrc #6972] [[email protected]: CVS commit: pkgsrc/databases]
Pullup pkgsrc [pullup-pkgsrc #6971] Fwd: CVS commit: pkgsrc/lang

June 05, 2025

OS News A critical look at NetBSD’s installer

NetBSD is an OS that I installed only a couple of times over the years, so I’m not very familiar with its installer, sysinst. This fact was actually what led to this article (or the whole series rather): Talking to a NetBSD developer at EuroBSDcon 2023, I mentioned my impression that NetBSD was harder to install than it needed to be. He was interested in my perspective as a relative newcomer, and so I promised to take a closer look and write about it. While it certainly took me long enough, I finally get to do this. So let’s take a look at NetBSD’s installer, shall we? The version explored here is NetBSD 10.1 on amd64.

↫ Eerie Linux

An excellent deep, deep dive into the NetBSD installer. The two earlier installments cover FreeBSD’s and OpenBSD’s installers.

Pullup 9 [pullup-9 #1958] pullup src/usr.bin/showmount/showmount.c r1.24-r1.25
Pullup 10 [pullup-10 #1127] pullup src/usr.bin/showmount/showmount.c r1.24-r1.25

June 03, 2025

Pullup 10 [pullup-10 #1126] Pullup request: fix nbdate not found in build
Pullup pkgsrc [pullup-pkgsrc #6970] pullup-request: mail/roundcube

June 02, 2025

UnitedBSD Installing and Compiling renterd on NetBSD

On NetBSD, the SQLite Backup and Close methods used by renterd and hostd (Sia decentralized data storage) depend on CGO-specific features of the go-sqlite3 driver, which are not fully supported on this platform.
Attempts to substitute go-sqlite3 with CGO-free alternatives such as modernc.org/sqlite or ncruces/go-sqlite3 proved impractical due to required structural changes in the codebase, despite preliminary efforts.
Consequently, Backup and Close functionalities have been disabled in this howto to allow successful compilation and runtime on NetBSD 10.1.
Regular manual backups should be performed using standard SQLite commands, e.g., sqlite3 db.sqlite \".backup 'db.bkp'\".

Prerequisites

Install necessary packages

pkgin update
pkgin -y install go124 git gcc14 tmux

Clone the repository

cd /tmp
git clone https://github.com/SiaFoundation/renterd.git
cd renterd

SQLite Installation (CGO)
go124 install github.com/mattn/go-sqlite3

Required modifications to the source code

Edit /tmp/renterd/stores/sql/sqlite/backup.go, replace the entire backupDB function (starting from line 36) :

func backupDB(ctx context.Context, src *dsql.DB, destPath string) (err error) {
        // create the destination database
        dest, err := dsql.Open("sqlite3", destPath)
        if err != nil {
                return fmt.Errorf("failed to open destination database: %w", err)
        }
        defer func() {
                // errors are ignored
                dest.Close()
                if err != nil {
                        // remove the destination file if an error occurred during backup
                        os.Remove(destPath)
                }
        }()

        // initialize the source conn
        sc, err := sqlConn(ctx, src)
        if err != nil {
                return fmt.Errorf("failed to create source connection: %w", err)
        }
        defer sc.Close()

        // initialize the destination conn
        dc, err := sqlConn(ctx, dest)
        if err != nil {
                return fmt.Errorf("failed to create destination connection: %w", err)
        }
        defer dc.Close()

        // start the backup
        // NOTE: 'main' referes to the schema of the database
        backup, err := dc.Backup("main", sc, "main")
        if err != nil {
                return fmt.Errorf("failed to create backup: %w", err)
        }
        // ensure the backup is closed
        defer func() {
                if err := backup.Finish(); err != nil {
                        panic(fmt.Errorf("failed to finish backup: %w", err))
                }
        }()

        for step := 1; ; step++ {
                select {
                case <-ctx.Done():
                        return ctx.Err()
                default:
                }

                if done, err := backup.Step(100); err != nil {
                        return fmt.Errorf("backup step %d failed: %w", step, err)
                } else if done {
                        break
                }
        }
        if _, err := dest.Exec("VACUUM"); err != nil {
                return fmt.Errorf("failed to vacuum destination database: %w", err)
        }
        return nil
}

with:

func backupDB(ctx context.Context, src *dsql.DB, destPath string) (err error) {
    // deactivation for NetBSD
    return nil
}

Enable editing:
chmod +w /root/go/pkg/mod/go.sia.tech/hostd/[email protected]/persist/sqlite/store.go

Edit this file and replace the entire backupDB function :

func backupDB(ctx context.Context, src *sql.DB, destPath string) (err error) {
        // create the destination database
        dest, err := sql.Open("sqlite3", sqliteFilepath(destPath))
        if err != nil {
                return fmt.Errorf("failed to open destination database: %w", err)
        }
        defer func() {
                // errors are ignored
                dest.Close()
                if err != nil {
                        // remove the destination file if an error occurred during backup
                        os.Remove(destPath)
                }
        }()

        // initialize the source conn
        sc, err := sqlConn(ctx, src)
        if err != nil {
                return fmt.Errorf("failed to create source connection: %w", err)
        }
        defer sc.Close()

        // initialize the destination conn
        dc, err := sqlConn(ctx, dest)
        if err != nil {
                return fmt.Errorf("failed to create destination connection: %w", err)
        }
        defer dc.Close()

        // start the backup
        backup, err := dc.Backup("main", sc, "main")
        if err != nil {
                return fmt.Errorf("failed to create backup: %w", err)
        }
        // ensure the backup is closed
        defer func() {
                if err := backup.Finish(); err != nil {
                        panic(fmt.Errorf("failed to finish backup: %w", err))
                }
        }()

        for step := 1; ; step++ {
                select {
                case <-ctx.Done():
                        return ctx.Err()
                default:
                }

                if done, err := backup.Step(100); err != nil {
                        return fmt.Errorf("backup step %d failed: %w", step, err)
                } else if done {
                        break
                }
        }
        if _, err := dest.Exec("VACUUM"); err != nil {
                return fmt.Errorf("failed to vacuum destination database: %w", err)
        }
        return nil
}

with:

func backupDB(ctx context.Context, src *sql.DB, destPath string) (err error) {
    // deactivation for NetBSD
    return nil
}

Also, replace the line:
sqliteVersion, _, _ := sqlite3.Version()
with:
sqliteVersion := "deactivated"

Compilation

cd /tmp/renterd
export CGO_ENABLED=1
go124 mod tidy
go124 build -v ./...
cd cmd/renterd
go124 build

Binary installation

mkdir -p /opt/renterd/bin
mv /tmp/renterd/* /opt/renterd/
cp /opt/renterd/cmd/renterd/renterd /opt/renterd/bin/

Creating a dedicated secure user

groupadd renterd
useradd -g renterd -d /var/empty -s /sbin/nologin -c "renterd Daemon" renterd

Applying strict permissions

chown -R renterd:renterd /opt/renterd
chmod -R 750 /opt/renterd

Starting renterd with tmux (simple example)
tmux new -s renterd

usermod -s /bin/sh renterd
su renterd -c 'cd /opt/renterd && /opt/renterd/bin/renterd'

On first launch, initialize with the corresponding seed phrase and wallet address.

Detach the tmux session: Ctrl+b, then d

Remove the interactive shell from the user:
usermod -s /bin/false renterd

Off course, create a service and a /opt/renterd/renterd.yml configuration file.

In order to access the web console of renterd, just create an SSH tunnel (-L9980 127.0.0.1:9980) between your client and the server, and use your browser (http://127.0.0.1:9980)

OS News Harpoom: of course the Apple Network Server can be hacked into running Doom

Of course you can run Doom on a $10,000+ Apple server running IBM AIX. Of course you can. Well, you can now.

Now, let’s go ahead and get the grumbling out of the way. No, the ANS is not running Linux or NetBSD. No, this is not a backport of NCommander’s AIX Doom, because that runs on AIX 4.3. The Apple Network Server could run no version of AIX later than 4.1.5 and there are substantial technical differences. (As it happens, the very fact it won’t run on an ANS was what prompted me to embark on this port in the first place.) And no, this is not merely an exercise in flogging a geriatric compiler into building Doom Generic, though we’ll necessarily do that as part of the conversion. There’s no AIX sound driver for ANS audio, so this port is mute, but at the end we’ll have a Doom executable that runs well on the ANS console under CDE and has no other system prerequisites. We’ll even test it on one of IBM’s PowerPC AIX laptops as well. Because we should.

↫ Cameron Kaiser

Excellent reading, as always, from Cameron Kaiser.


May 31, 2025

Pullup 9 [pullup-9 #1957] hp300 tvrx framebuffer fix

May 28, 2025

NetBSD Blog The NetBSD Foundation 2025 Annual General Meeting summary and logs

On May 17, 21:00 UTC we had The NetBSD Foundation Annual General Meeting on #netbsd-agm IRC channel on Libera.Chat.

We had presentations from:

At the end we also had a Q&A session open to anyone.

If you have missed it you can find the IRC logs here.

UnitedBSD tty on resume and mouse 4/5

I've been using netbsd on my thinkpad x230 as a daily driver for a bit, and it's been a pretty good experience. The biggest papercuts I've experienced so far have been that I have to switch TTY after resume and that mouse 4/5 act like scroll up/down respectively while I'd prefer to have them be backward/forward navigation.
The TTY switching is annoying, seeing as I seem to have to wait until the keyboard accepts input (which in rare occasions it does not and instead the fan spins up and I'm left with an unresponsive computer I have to hard reset) and then do ctrl-alt-f4 then ctrl-alt-f5 to get back to X. Is there any way to set which tty to switch to after resume?


May 25, 2025

Unix Stack Exchange X11/rxvt-unicode: Alt+KP_[n] no longer distinguishable from Alt+[n], would like the old behaviour back

[I got redirected here from StackOverflow as this is not a programming question (oops).]

For about the last three years or so, under X11, Alt+KP_[n] has yielded a different keycode/keysym (set?) than Alt+[n]. I have been using this difference to change fonts on the fly on urxvt. Checking the version of urxvt shows that the version has not changed since 2021...

rxvt-unicode (urxvt) v9.26 - released: 2021-05-14

...so, what has changed in X11 to cause this, and why has this (been) changed? Or, conversely, is there anything I can do in any of my configurations (xmodmap, etc) to re-enable this behaviour? I can't really switch to having Alt+[n] accomplish this, as I use Alt+[n] as digit-argument in bash (via .inputrc).

I would really like to get the old behaviour of Alt+KP_[n] back. KP_7 shows as a different keystroke under xev than does 7, even though it shows the same output value

This is happening on X11 under both cygwin and NetBSD.

Excerpt of xev(X11) output:

    root 0x36f, subw 0x0, time 2440468, (174,166), root:(2818,273),
    state 0x10, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyPress event, serial 33, synthetic NO, window 0xc00001,
    root 0x36f, subw 0x0, time 2441828, (174,166), root:(2818,273),
    state 0x18, keycode 79 (keysym 0xffb7, KP_7), same_screen YES,
    XLookupString gives 1 bytes: (37) "7"
    XmbLookupString gives 1 bytes: (37) "7"
    XFilterEvent returns: False

KeyRelease event, serial 33, synthetic NO, window 0xc00001,
    root 0x36f, subw 0x0, time 2441906, (174,166), root:(2818,273),
    state 0x18, keycode 79 (keysym 0xffb7, KP_7), same_screen YES,
    XLookupString gives 1 bytes: (37) "7"
    XFilterEvent returns: False

KeyRelease event, serial 33, synthetic NO, window 0xc00001,
    root 0x36f, subw 0x0, time 2442734, (174,166), root:(2818,273),
    state 0x18, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyPress event, serial 33, synthetic NO, window 0xc00001,
    root 0x36f, subw 0x0, time 2445171, (174,166), root:(2818,273),
    state 0x10, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyPress event, serial 33, synthetic NO, window 0xc00001,
    root 0x36f, subw 0x0, time 2445390, (174,166), root:(2818,273),
    state 0x18, keycode 16 (keysym 0x37, 7), same_screen YES,
    XLookupString gives 1 bytes: (37) "7"
    XmbLookupString gives 1 bytes: (37) "7"
    XFilterEvent returns: False

KeyRelease event, serial 33, synthetic NO, window 0xc00001,
    root 0x36f, subw 0x0, time 2445468, (174,166), root:(2818,273),
    state 0x18, keycode 16 (keysym 0x37, 7), same_screen YES,
    XLookupString gives 1 bytes: (37) "7"
    XFilterEvent returns: False

KeyRelease event, serial 33, synthetic NO, window 0xc00001,
    root 0x36f, subw 0x0, time 2445984, (174,166), root:(2818,273),
    state 0x18, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

TRIED: In a urxvt, I pressed Alt+KP_7 (sub any KP_ for 7, it makes no difference).

EXPECTED: I expected, as had happened before, the font to change, by virtue of Alt+KP_7 not being interpreted as the same keystroke as Alt+7.

ACTUAL RESULT: bash prompted (arg: 7), as though I had pressed Alt+7.


May 24, 2025

Ruben Schade An RPi bridge to the retro lab with NetBSD

Clara and I bought an apartment last year, and it’s been fun—and exhausting!—setting it up with everything we want. Our plan is to eventually get Ethernet wired up to each room, but in the interim our hobby room is a sufficient distance from the router that using cable isn’t feasible. This is a pain, because my retrocomputers don’t have Wi-Fi; and even if they did, they probably wouldn’t support the latest security protocols.

Then I remembered we had a few dusty Raspberry Pis in a box, a Wi-Fi dongle, and a Fast Ethernet hub. Yes, a hub! None of this would be fast, or even tolerable in a modern setting, but I figured it’d be more than sufficient as a temporary hack for these ancient machines.

The Raspberry Pi Model A+ was a no-go, because its lone USB port would need its own powered hub for the Wi-Fi module and Ethernet, and my serial-to-pi console cable is in another box I couldn’t find. But the first-gen Rasberry Pi from 2011 has two USB ports and Ethernet.

An old Raspberry Pi with a Wi-Fi dongle, power cable, and temporary HDMI connected while I configure it

I downloaded the latest NetBSD earmv6hf image, and followed the NetBSD Guide to configure wireless and create a bridge. I was going to write a guide here, but everything described just… worked. I have a wireless bridge in this room, which lets these old machines access our network in the other room. And it was cobbled together from stuff we already had.

NetBSD! One day it’ll surprise me when I can’t use it for a random little project. Not today.

I feel like I should have a separate page on the Retro Corner specifically about how to interface old machines with the modern world. Well okay, FTP and gopher aren’t exactly modern world. But they’re hosted in FreeBSD jails, which are.

By Ruben Schade in Sydney, 2025-05-25.


May 18, 2025

DragonFly BSD Digest Lazy Reading for 2025/05/18

Dumbness or perhaps stupidity, today’s mini theme.

Your unrelated audio of the week: Squarepusher’s Ultravisitor, remastered.

Ruben Schade The world’s only stable Windows Me machine

For those too young to remember, or who wisely chose to forget, Windows Millennium Edition—aka, Windows Me—was notorious. Microsoft removed Real Mode DOS access which peterbed weirdos like me who loved rebooting into MS-DOS to play NFS:SE, but history will remember Windows Me for its instability and performance issues. It was available on the market for about a year in 2000 before Windows XP was released, and few people were sad to see it go… perhaps other than the technicians for whom the OS gave them a guaranteed and regular source of clients.

I had one factory-installed Windows Me machine as a kid, a Sony VAIO PCG-C1VM laptop. This I quickly “upgraded” (cough) to Windows 98 Second Edition like most people, and upon realising how easy it was, made a small fortune for a kid by offering to do it for friends and their parents. Windows 98 was an error-filled mess, but it was still a breath of fresh air compared to Windows Me. Then when Windows XP came out, I jumped to 2000 and lived with the performance drop so I didn’t have to deal with crashes.

But this is where the weirdness starts. I may have inadvertently stumbled upon a specific combination of parts and drivers that result in a stable Windows Me system; one that works faster, and more reliably than Windows 98. HOW!?

Like most of my retrocomputers, I bought this Dell Dimension 4100 on a lark for a bit of nostalgia. I never had one of these beige towers as a kid, but it seemed as though everyone in Singapore did around the late 1990s and early 2000s. My school upgraded all their disparate DIY Pentium 1 machines cobbled together at the likes of Sim Lim Square and Funan Centre for a fleet of these towers, and they imprinted. I saw someone in Canberra selling one for less than $100 in immaculate physical condition, and the rest is history.

My intention was to make it a glorified display piece on our study Museum Shelf of Doom, but when it arrived I was shocked to discover it was the most capable retro PC I own. It sports an absolutely blazing 800 MHz Pentium !!! CPU, 128 MiB of PC-133 memory, and… a dreadful proprietary ATI Rage 128 card which I quickly swapped out for a cheap and cheerful 4× AGP Radeon 9600 XT. This is now my primary Win 9x game machine for the likes of Train Simulator, Flight Simulator 98, Age of Empires II, Golf 95 (shaddup), The Sims, SimCity 3000 Unlimited, and my old Borland IDEs.

Okay, so what does this have to do with Windows Me? Well those of you who’ve tinkered with PCs of this vintage know that SATA was either in its infancy, or not available at all. I’ve had the most success with Transcend IDE SSDs with the internal ATAPI controller, or by using industrial CF Cards. The challenge though has been getting the host machine and OS to detect UDMA support and use it, or your performance will almost make you long for the days of you 7200 RPM hard drive. Hope it’s not a Deathstar.

Windows 98 SE on this machine, despite being the factory standard OS at the time, simply doesn’t like this SSD. It takes forever to boot, copy files, and crashes upon shutdown, no matter how many times I’ve reinstalled it. The authentic Windows experience, in other words! This despite the fact UDMA is shown in Control Panel, and in the BIOS POST screens when the machine starts. The same configuration works on my other old PCs without issues, so I assume its a weird combination of stuff on this specific tower.

I thought I’d try Windows Me for a bit of a joke, but it’s had the last laugh. It’s been one of the two bootable OSs on this machine for more than a year now (I always dual-boot retro computers with NetBSD, partly for fun, but also so I can use it to copy files and so on), and it’s only crashed a handful of times. It boots quickly, all the hardware was detected and installed the first time, games run absolutely flawlessly, and I can even run Netscape Communicator to launch my Retro Corner.

I’m… kinda speechless to be honest. I guess Windows Me was testy about what it ran on, and I’ve somehow stumbled upon the perfect mix of parts to make it work, entirely by accident.

Would I recommend running Windows Me for your retrocomputing adventures? I mean, if Windows 98 SE is performing crap with your IDE SSD, maybe give it a try!? But, is a word with three letters.

By Ruben Schade in Sydney, 2025-05-18.


May 14, 2025

Ruben Schade Building a new home server?

At the risk of invoking Betteridge’s Law of Headlines, I pose this post as a question because it’s a bit open-ended.

I’m in a bit of an awkward situation right now. For the longest time I used to buy whatever cheap HP Microserver I could get on eBay. They’re cheap, quiet, yet still manage to pack four hard drive bays. Tower chassis more than three times the size still usually only support the same number of hard drive bays, for reasons that utterly confound me. It’s as though everyone shook hands and said if they want more drives, get a noisy 2U rack server.

When our home needs began to outgrow these HP Companion Cubes, I cobbled together a server out of a Supermicro workstation board, 32 GiB of ECC DDR4-2133 memory, and a Xeon E3-1240 v6 CPU off Gumtree and eBay for less than AU $200 total. This was put into an old Antec 300 case with large, slow-spinning fans and eight drives. Almost five years later (wow!), and I’m surprised how well this is all still working. This four core machine is whisper quiet, sips power, and the FreeBSD host delivers:

Ah Monty Python. But I think we’ve reached the system’s limit, not in speed necessarily, but threads. There’s some CI stuff I’d like to try on it, and Clara and I want to try running a Stardew Valley server (cough), but I’ve already over-provisioned it as it is.

As Allan Jude one quipped at an AsiaBSDCon, the biggest challenge with homelab servers is that they often become production. Those above use cases make it eminently useful, but it limits the live tinkering I can do with it. I don’t want to be responsible for a backup failing, or a game not loading, or the TV not working, because I’m messing with some optimisations or experimental builds. Clara is the most accommodating person in the universe, but I suspect even she has limits! As do I.

My plan, such that it is, is to build a slightly more modern home server, maybe with 8 cores or more if it doesn’t push the power envelope too high. That can run our production home stuff, and I can relegate this older machine to tinkering and testing. I haven’t run the -CURRENT FreeBSD branch in years, which is a poor showing for someone so invested in the platform.

The thing is, I have no idea what’s out there. At work I live in “enterprise” server land, which is all way too hot and expensive for what I’d need. AMD might be fun, but is their consumer silicon really ECC compatible? I’m not that worried about IPMI or equivalents, because I use inexpensive network-attached KVMs. I’m a big fan of buying two generation or older hardware, because it’s (a) tested and (2) significantly cheaper, which perhaps rules out AM5 for now? Not sure.

I haven’t had to research a new budget server for a while, so I’m interested to see what I can get. Something second-hand, a bit older, and something we could stand hearing as it runs in the corner of the room.

Hey look, another open-ended post! Aren’t those great?

By Ruben Schade in Sydney, 2025-05-15.


May 12, 2025

OS News A brief history of the BSD Fast FileSystem

We’re looking at an article from 2007 here, but I still think it’s valuable and interesting, especially from a historical perspective.

I first started working on the UNIX file system with Bill Joy in the late 1970s. I wrote the Fast File System, now called UFS, in the early 1980s. In this article, I have written a survey of the work that I and others have done to improve the BSD file systems. Much of this research has been incorporated into other file systems.

↫ Marshall Kirk McKusic

Variants of UFS are still the default file system in at least NetBSD and OpenBSD, and it’s one of the two default options in FreeBSD (alongside ZFS). In other words, this article, and the work described therein, is still relevant to this very day.


May 08, 2025

NetBSD Blog Welcome to Google Summer of Code 2025 contributors!
Google Summer of Code logo

We are happy to announce that The NetBSD Foundation will participate in Google Summer of Code 2025 with 3 projects!

Here the list of the projects and contributors:

For the next 3 weeks mentors and contributors will get in touch for the community bonding period. Mentors will help contributors to get started with the project, introduce them to the community and get more familiar with the codebase and adjusting deliverables for the the project.

Welcome Dennis, Ethan and Vasyl!


May 04, 2025

DragonFly BSD Digest Lazy Reading for 2025/05/04

Some BSD-specific links mixed in.

Your unrelated music video of the week: DRASS – Nucleation Point.  Makes me think I need to start making my phone less useful.  (via)

 


April 16, 2025

NetBSD General on DaemonForums netbsd gdb bug/problem
I am doing this on a raspberry pi 3 (B+ i think) running netbsd 10.1
gdb said to report this as a bug but the link it gives says to contact the distributor directly instead. I have never reported a bug directly and I don't know how to check if this has been already reported. If someone could let me know who to report it to or how that would be great.

Code:

rpi$ uname -a
NetBSD rpi 10.1 NetBSD 10.1 (RPI2) #0: Mon Dec 16 13:08:11 UTC 2024  [email protected]:/usr/src/sys/arch/evbarm/compile/RPI2 evbarm
rpi$ cat test.s
    .section .text
    .global _start

_start:
    mov r7, #1          // Syscall number for exit
    mov r0, #0          // Exit status
    svc #0              // Make the syscall

rpi$ as -march=armv6 -o test.o test.s
rpi$ ld -o test test.o --dynamic-linker /libexec/ld.elf_so
rpi$ chmod +x test
rpi$ ./test
-sh: Cannot execute ELF binary ./test
rpi$ file test
test: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, not stripped
rpi$ gdb test
GNU gdb (GDB) 11.0.50.20200914-git
[...]
Type "apropos word" to search for commands related to "word"...
Reading symbols from test...
(No debugging symbols found in test)
(gdb) break _start
Breakpoint 1 at 0x10054
(gdb) run
Starting program: /home/NSA/TEMP.d/asm.d/hw.d/test
exec: Cannot execute ELF binary /home/NSA/TEMP.d/asm.d/hw.d/test
/usr/src/external/gpl3/gdb/lib/libgdb/../../dist/gdb/target.c:2144: internal-error: void target_mourn_inferior(ptid_t): Assertion `ptid == inferior_ptid'
 failed.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Quit this debugging session? (y or n) y

This is a bug, please report it.  For instructions, see:
<https://www.gnu.org/software/gdb/bugs/>.

/usr/src/external/gpl3/gdb/lib/libgdb/../../dist/gdb/target.c:2144: internal-error: void target_mourn_inferior(ptid_t): Assertion `ptid == inferior_ptid'
 failed.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Create a core file of GDB? (y or n) y
[1]  Abort trap (core dumped) gdb test
rpi$

maybe I am using as or ld with incorrect flags?

thanks for any help

April 15, 2025

Amitai Schlair Sensible basic Minecraft hosting

One of the few things I know about Minecraft is, some players I know and love could be playing together if someone were to run a server for them. That’s the sort of thing I’d gladly do, provided I could approximately never again pay attention to it.

Here’s what I came up with. Let’s see how it pans out.

Prerequisites

My Virtual Private Server at Panix is NetBSD/amd64 with plenty of RAM, disk, and network headroom. Marginal additional usage is therefore free.

System- and pkgsrc-provided services are controlled by the usual NetBSD-style rc.d scripts.

Site-specific services are supervised, including supervision trees controlled by each user. In the following excerpt from my running system:

/service/sniproxy: up (pid 11133) 81141 seconds

/service/svscan-notqmail: up (pid 325) 846389 seconds
  /home/notqmail/service/renewssl.www.notqmail.org: up (pid 20951) 81141 seconds
  /home/notqmail/service/www.notqmail.org: up (pid 24539) 81141 seconds

/service/svscan-schmonz: up (pid 394) 846389 seconds
  /home/schmonz/service/agilein3minut.es: up (pid 26325) 81141 seconds
  /home/schmonz/service/latentagility.com: up (pid 24554) 81141 seconds
  /home/schmonz/service/renewssl.agilein3minut.es: up (pid 18299) 81141 seconds
  /home/schmonz/service/renewssl.latentagility.com: up (pid 14394) 81141 seconds
  /home/schmonz/service/renewssl.schmonz.com: up (pid 12424) 81140 seconds
  /home/schmonz/service/schmonz.com: up (pid 21449) 81141 seconds

These packages were already installed:

I’ve added these:

I’m installing Minecraft’s server software manually, so it’ll be my job to notice when to update. Gotta automate the noticing, at least.

Oh, and I need a sensible process-supervision run script for the Minecraft server. The script needs to solve two application-specific system-integration problems:

  1. The usual supervision signals cause the server to terminate without saving the state of the world, which seems… rude
  2. The usual way to configure a running server is to get on the console and type commands into it, which implies having started it inside a tmux session (which, I love tmux, but not for this)

We solve for (1) by running the server as a child process and translating supervision signals into Minecraft commands.

We solve for (2) by connecting a named pipe to the server’s standard input. Then commands can be sent to the server using nothing but echo and ordinary output redirection.

Without even really being asked, my brain instantly produced the mechanisms for (1) in Perl. Then someone on #s6 shared a run script that additionally solved (2) while being more than twice as short as mine. How? By writing it in execline, a language expressly designed to be this kind of glue.

Step by step: Supervising Minecraft service

1. Create dedicated Unix user with its own process supervisor

useradd -m minecraft
mkdir -p /etc/service/svscan-minecraft/log
cd /etc/service/svscan-minecraft
cat > log/run <<'EOF'
#!/bin/sh
exec setuidgid minecraft logger -t svscan-minecraft -p daemon.info
EOF
chmod +x log/run
cat > run <<'EOF'
#!/bin/sh
exec 2>&1
exec setuidgid minecraft argv0 svscan svscan-minecraft /home/minecraft/service
EOF
chmod +x run
ln -s /etc/service/svscan-minecraft /var/service/

2. Globally, map hostname to IP

echo '+minecraft.schmonz.com:my.server.ip.here' >> /etc/tinydns/data
service tinydns reload

3. Locally, map port number to service name

echo 'minecraft 25565/tcp # minecraft.schmonz.com' >> /etc/services
service sysdb services

4. Allow incoming connections

$EDITOR /etc/npf.conf # add minecraft to $services_tcp
service npf reload

5. Download software

su minecraft
cd
mkdir -p sites/schmonz.com/minecraft/service
cd sites/schmonz.com/minecraft
mkdir bin
curl -o bin/server.jar https://piston-data.mojang.com/v1/objects/e6ec2f64e6080b9b5d9b471b291c33cc7f509733/server.jar

6. Accept EULA

mkdir data
echo 'eula=true' > data/eula.txt

7. Create control socket

mkfifo -m 0600 data/control

8. Symlink service logs where I usually look

ln -s data/logs logs

9. Create run script

cat > service/run <<'EOF'
#!/opt/pkg/bin/execlineb -P
fdmove -c 2 1
cd /home/minecraft/sites/schmonz.com/minecraft/data
redirfd -w -nb 3 control
trap -x
{
    SIGINT  { fdmove 1 3 s6-echo stop }
    SIGHUP  { fdmove 1 3 s6-echo stop }
    SIGTERM { fdmove 1 3 s6-echo stop }
    SIGPIPE { fdmove 1 3 s6-echo stop }
}
fdclose 3
redirfd -r 0 control
java -Xmx1024M -Xms1024M -jar ../bin/server.jar --nogui
EOF
chmod +x service/run

10. Enable service

ln -s /home/minecraft/sites/schmonz.com/minecraft/service ~/service/minecraft.schmonz.com

11. Send initial configuration

cat > data/control <<'EOF'
whitelist on
whitelist add so-and-so
save-on
EOF

Be notified of updates

As the minecraft user:

1. Create service and run script

cd ~/sites/schmonz.com/minecraft
mkdir -p update/service/log
cd update/service

cat > log/run <<'EOF'
#!/bin/sh

exec multilog t ./main
EOF
chmod +x log/run

cat > run <<'EOF'
#!/bin/sh

set -e
set -x

exec 2>&1

MINECRAFT_VERSIONS_ENDPOINT='https://piston-meta.mojang.com/mc/game/version_manifest.json'

running_version() {
   unzip -p ../bin/server.jar version.json \
       | jq -r .name
}

available_version() {
   curl \
       --silent \
       --user-agent "Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/81.0" \
       "${MINECRAFT_VERSIONS_ENDPOINT}" \
   | jq -r .latest.release
}

main() {
   cd /home/minecraft/sites/schmonz.com/minecraft/data

   while true; do
       running="$(running_version)"
       available="$(available_version)"
       if [ "${running}" != "${available}" ]; then
           echo "MINECRAFT SERVER UPDATE NEEDED: ${running} -> ${available}"
           echo "" | mail -s "Please update Minecraft server: ${running} -> ${available}" [email protected]
       fi
       sleep 250000
   done
}

main "$@"
exit $?
EOF
chmod +x run

2. Enable service

ln -s /home/minecraft/sites/schmonz.com/minecraft/update/service ~/service/update.minecraft.schmonz.com

Further improvements

If it’s desirable to have the server periodically auto-save, I’ll add one more service that writes save-all to data/control.

If pkgsrc had a minecraft-server package (FreeBSD Ports does), I could delete my ad hoc update-notification service. Maybe I’ll make it so. I do like packaging things as part of my area-under-the-curve strategy.

My host-specific supervision trees and pkgsrc’s djbware rc.d scripts (qmailsmtpd, for instance) are still using daemontools. I’ve had the intention to switch to s6 for a long time. When it happens, I’ll be happy about it.

I haven’t tried to understand why there are “Java” and “Bedrock” editions of Minecraft, but it seems like they don’t interoperate. I’m sure there are reasons for this product segmentation and that I’ll come to better understand them in the fullness of time. Meanwhile, if and when I need to add Bedrock client interop, Geyser looks like an easy option — once I’m running something other than the vanilla upstream Minecraft Java server. I’ll need to try to understand that whole situation, too.

Are you an experienced Minecraft server administrator? Please share tips and advice!

NetBSD Package System (pkgsrc) on DaemonForums MetBSD 10.1 + pkgsrc + fonts
Note, after I updated to pkgsrc 2025Q1 on NetBSD 10.1 amd64, fonts for gvim, Emacs (GUI) were messed up using the same settings before the update.

This can be fixed by installing dejavu-ttf-2.37. I wonder if a dependency was missed.

April 07, 2025

Unix Stack Exchange How to prevent data loss when using blkdiscard on NetBSD

On Linux, this command

fstrim -av

I will remove all unused blocks (particularly interesting on VM disks and necessary on SSD to preserve/get a longer duration). NetBSD has a similar command called blkdiscard

This command wipes the entire disk, so it becomes unusable (correct me if I am wrong)

blkdiscard -v /dev/rwd...

I see there is a flag which starts to discard after some bytes (or MB)

blkdiscard -v -f 256m -m 128m /dev/rwd0c

Suppose my partition uses 6GB of data, to make a safe discard (my data still remains), is this the correct command?

blkdiscard -v -f 6000m -m 128m /dev/rwd0c

March 16, 2025

DragonFly BSD Digest Lazy Reading for 2025/03/16

Done early!


March 11, 2025

NetBSD General on DaemonForums NetBSD 10.x turns off the display when booting off USB 3 SSD
The NetBSD 10.1 kernel turns off the display when booting off a USB 3 SSD on my ProDesk 600 G1. (The 9.4 kernel doesn't do that, nor does 10.1 do it if it boots off a CD.) When booting the 10.1 kernel with the -a switch, after it asks for boot and dump devices, and I enter the kernel debugger (Ctrl-Alt-Esc) at the last question about the file system type and issue the "continue" command there, it starts outputting repeatedly
Code:

umass0: BBB reset failed, TIMEOUT
xhci0: xhci_set_dequeue: endpoint 0x0, timed out

Also, both 10.1 and 9.4 do a weird thing on that machine: a few minutes (how many? it's different each time!) past bootstrap the "Dhrystone" and "Coremark" integer (but not floating point) performance drops about 5 to 7 times while idle state CPU load remains near zero and CPU temperature normal. This problem doesn't exist with the other 6 operating systems on that machine nor with NetBSD 10.1 on another machine.

I've attached the "/var/run/dmesg.boot" file of NetBSD 9.4 (can't do that for 10.1 because it doesn't go up to the point of mounting the root device).

Attached Files
File Type: zip dmesg.boot.zip (6.2 KB)

March 10, 2025

OS News Exploring the (discontinued) hybrid Debian GNU/kFreeBSD distribution

For decades, Linux and BSD have stood as two dominant yet fundamentally different branches of the Unix-like operating system world. While Linux distributions, such as Debian, Ubuntu, and Fedora, have grown to dominate the open-source ecosystem, BSD-based systems like FreeBSD, OpenBSD, and NetBSD have remained the preferred choice for those seeking security, performance, and licensing flexibility. But what if you could combine the best of both worlds—Debian’s vast package ecosystem with FreeBSD’s robust and efficient kernel?

Enter Debian GNU/kFreeBSD, a unique experiment that merges Debian’s familiar userland with the FreeBSD kernel, offering a hybrid system that takes advantage of FreeBSD’s technical prowess while maintaining the ease of use associated with Debian. This article dives into the world of Debian GNU/kFreeBSD, exploring its architecture, installation, benefits, challenges, and real-world applications.

↫ George Whittaker

More of a list of upsides and downsides than an actual in-depth article, but that doesn’t make it any less interesting. There’s a variety of attempts out there to somehow marry the Linux and BSD worlds, and each of them takes a unique approach. I’m not sure the Debian userland with a FreeBSD kernel is the way to go, though, and it seems I’m not alone – Debian GNU/kFreeBSD was officially dropped from Debian in 2015 or so, and after a flurry of unofficial activity in 2019, it was discontinued completely in 2023 due to a lack of activity and developer interest. Odd that the source article doesn’t mention that.

If you’re still interested in a combination of Linux and BSD, I’d keep an eye on Chimera Linux instead. It’s very actively developed, focuses on portable code by supporting many architectures, and its developers are veterans in this space. I have my eye on Chimera Linux as my future distribution of choice.


March 09, 2025

Benny Siegert on pkgsrc Developing pkgsrc with git

I stopped developing pkgsrc with CVS.

Quick bit of background: NetBSD is still using CVS as its version control system. The decision to move to something else has been taken long ago, but the switch has not happened as of today.

Working with CVS is painful for many reasons. For instance, there is no way to see your local changes without waiting several minutes for a cvs up -n. A full tree update (cvs up) churns for quite a while before it even starts updating any files.


March 06, 2025

OS News NetBSD on a JavaStation

Back when Java was still a new programming language, Sun had the idea of building a computer specifically designed for Java, unique processor running byte-code as its native machine code and all. This whole endeavour proved to be more complicated than Sun had hoped, and as such, they eventually abandoned the idea of a Java processor in favour of plain SPARC. When the JavaStation shipped, it was a regular SPARC workstation without a hard drive, running something called JavaOS from flash memory.

Since JavaOS is, of course, long gone, what can you do with JavaStation today? Well, you apparently can run NetBSD on it, but it’s quite an ordeal. The JavaStation needs to boot from the network using a combination of RARP, NFS, and more, and surprisingly, this entire setup, including the computer acting as the ‘server’ for the JavaStation, is well-documented and supported by NetBSD. Once you’ve gone through all the steps, you’ll end up with a JavaStation running the latest release of NetBSD, which is pretty cool.

Obviously there is still a lot to do; as you can see postfix isn’t happy, and the swapfile security needs tightening up for a start. But we do now have a functional NetBSD system running on a vintage network computer!

↫ Old Fart’s Almanac

NetBSD’s continued support for the most arcane of hardware will never cease to amaze me.


February 27, 2025

NetBSD Blog The NetBSD Foundation will participate in Google Summer of Code 2025!
Google Summer of Code logo

We are happy to announce that The NetBSD Foundation will participate in Google Summer of Code 2025!

Would you like to contribute to NetBSD and/or pkgsrc in the next months? Google Summer of Code is a great chance for that!

You can find a list of possible projects at Google Summer of Code project page. Of course, you can also propose your own!

Please reach us via #netbsd-code IRC channel on Libera.Chat and/or via mailing lists.

If you are more interested about Google Summer of Code please also check official homepage at g.co/gsoc.

Looking forward to a great Summer!


February 17, 2025

NetBSD Installation and Upgrading on DaemonForums EFI boot problem
Hello,
I am trying to boot fresh NetBSD 10.1 on older HP machine HP Compaq Elite 8300. System disk is GPT and contains Window and above NetBSD installation. I am using rEFInd for dual-boot.

Problem is that after selecting NetBSD boot entry there does not appear text-mode icon with:
...NetBSD/x86 EFI Boot (x64)...
So (IMHO) bootx64.efi has some problem.
There only appears some address ranges quickly scrolling up and then it stops.

But
when I boot from USB key and use manual boot parameters to boot OS from disk:
boot NAME=NetBSD:netbsd then OS on the disk successfully starts up.

I tried to rewrite bootx64.efi on EFI partition with /usr/mdec/bootx64.efi
or with bootx64.efi present on USB key, it does not help.
I don't know to explain myself this behavior.
My NetBSD installation is on wd0 dk4.
Any ideas ?
Code:

[    1.000000] Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
[    1.000000]    2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013,
[    1.000000]    2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023,
[    1.000000]    2024
[    1.000000]    The NetBSD Foundation, Inc.  All rights reserved.
[    1.000000] Copyright (c) 1982, 1986, 1989, 1991, 1993
[    1.000000]    The Regents of the University of California.  All rights reserved.

[    1.000000] NetBSD 10.1 (GENERIC) #0: Mon Dec 16 13:08:11 UTC 2024
[    1.000000]        mkrepro%mkrepro.NetBSD.org@localhost:/usr/src/sys/arch/amd64/compile/GENERIC
[    1.000000] total memory = 24450 MB
[    1.000000] avail memory = 23624 MB
[    1.000000] timecounter: Timecounters tick every 10.000 msec
[    1.000000] Kernelized RAIDframe activated
[    1.000000] RTC BIOS diagnostic error 0x20<config_unit>
[    1.000000] timecounter: Timecounter "i8254" frequency 1193182 Hz quality 100
[    1.000004] efi: systbl at pa c943df18
[    1.000004] mainbus0 (root)
[    1.000004] ACPI: RSDP 0x00000000C9BA3000 000024 (v02 HPQOEM)
[    1.000004] ACPI: XSDT 0x00000000C9BA3080 000084 (v01 HPQOEM SLIC-BPC 01072009 AMI  00010013)
[    1.000004] ACPI: FACP 0x00000000C9BACFE8 0000F4 (v04 HPQOEM SLIC-BPC 01072009 AMI  00010013)
[    1.000004] ACPI: DSDT 0x00000000C9BA3198 009E4A (v02 HPQOEM SLIC-BPC 00000017 INTL 20051117)
[    1.000004] ACPI: FACS 0x00000000C9BB5F80 000040
[    1.000004] ACPI: APIC 0x00000000C9BAD0E0 0000BC (v03 HPQOEM SLIC-BPC 01072009 AMI  00010013)
[    1.000004] ACPI: MCFG 0x00000000C9BAD1A0 00003C (v01 HPQOEM SLIC-BPC 01072009 MSFT 00000097)
[    1.000004] ACPI: HPET 0x00000000C9BAD1E0 000038 (v01 HPQOEM SLIC-BPC 01072009 AMI. 00000005)
[    1.000004] ACPI: SSDT 0x00000000C9BAD218 000460 (v01 IdeRef IdeTable 00001000 INTL 20091112)
[    1.000004] ACPI: SSDT 0x00000000C9BAD678 00544C (v01 COMPAQ WMI      00000001 MSFT 03000001)
[    1.000004] ACPI: SLIC 0x00000000C9BB2AC8 000176 (v01 HPQOEM SLIC-BPC 00000001      00000000)
[    1.000004] ACPI: SSDT 0x00000000C9BB2C40 0009AA (v01 PmRef  Cpu0Ist  00003000 INTL 20051117)
[    1.000004] ACPI: SSDT 0x00000000C9BB35F0 000A92 (v01 PmRef  CpuPm    00003000 INTL 20051117)
[    1.000004] ACPI: DMAR 0x00000000C9BB4088 0000B8 (v01 INTEL  SNB      00000001 INTL 00000001)
[    1.000004] ACPI: ASF! 0x00000000C9BB4140 0000A5 (v32 INTEL  HCG    00000001 TFSM 000F4240)
[    1.000004] ACPI: BGRT 0x00000000C9BB41E8 00003C (v00 HPQOEM SLIC-BPC 01072009 AMI  00010013)
[    1.000004] ACPI: 5 ACPI AML tables successfully acquired and loaded
[    1.000004] ioapic0 at mainbus0 apid 2: pa 0xfec00000, version 0x20, 24 pins
[    1.000004] cpu0 at mainbus0 apid 0
[    1.000004] cpu0: Use lfence to serialize rdtsc
[    1.000004] cpu0: Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz, id 0x306a9
[    1.000004] cpu0: node 0, package 0, core 0, smt 0
[    1.000004] cpu1 at mainbus0 apid 2
[    1.000004] cpu1: Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz, id 0x306a9
[    1.000004] cpu1: node 0, package 0, core 1, smt 0
[    1.000004] cpu2 at mainbus0 apid 4
[    1.000004] cpu2: Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz, id 0x306a9
[    1.000004] cpu2: node 0, package 0, core 2, smt 0
[    1.000004] cpu3 at mainbus0 apid 6
[    1.000004] cpu3: Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz, id 0x306a9
[    1.000004] cpu3: node 0, package 0, core 3, smt 0
[    1.000004] cpu4 at mainbus0 apid 1
[    1.000004] cpu4: Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz, id 0x306a9
[    1.000004] cpu4: node 0, package 0, core 0, smt 1
[    1.000004] cpu5 at mainbus0 apid 3
[    1.000004] cpu5: Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz, id 0x306a9
[    1.000004] cpu5: node 0, package 0, core 1, smt 1
[    1.000004] cpu6 at mainbus0 apid 5
[    1.000004] cpu6: Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz, id 0x306a9
[    1.000004] cpu6: node 0, package 0, core 2, smt 1
[    1.000004] cpu7 at mainbus0 apid 7
[    1.000004] cpu7: Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz, id 0x306a9
[    1.000004] cpu7: node 0, package 0, core 3, smt 1
[    1.000004] acpi0 at mainbus0: Intel ACPICA 20221020
[    1.000004] acpi0: X/RSDT: OemId <HPQOEM,SLIC-BPC,01072009>, AslId <AMI ,00010013>
[    1.000004] acpi0: MCFG: segment 0, bus 0-63, address 0x00000000f8000000
[    1.000004] ACPI: Dynamic OEM Table Load:
[    1.000004] ACPI: SSDT 0xFFFFE6B95FCBA008 00083B (v01 PmRef  Cpu0Cst  00003001 INTL 20051117)
[    1.000004] ACPI: Dynamic OEM Table Load:
[    1.000004] ACPI: SSDT 0xFFFFE6BE573F6408 000303 (v01 PmRef  ApIst    00003000 INTL 20051117)
[    1.000004] ACPI: Dynamic OEM Table Load:
[    1.000004] ACPI: SSDT 0xFFFFE6B95FC50408 000119 (v01 PmRef  ApCst    00003000 INTL 20051117)
[    1.000004] acpi0: SCI interrupting at int 9
[    1.000004] acpi0: fixed power button present
[    1.000004] timecounter: Timecounter "ACPI-Safe" frequency 3579545 Hz quality 900
[    1.010635] hpet0 at acpi0: high precision event timer (mem 0xfed00000-0xfed00400)
[    1.010635] timecounter: Timecounter "hpet0" frequency 14318180 Hz quality 2000
[    1.011366] acpiec0 at acpi0 (H_EC, PNP0C09-1): not present
[    1.011366] TPMX (PNP0C01) at acpi0 not configured
[    1.011366] FWHD (INT0800) at acpi0 not configured
[    1.011366] attimer1 at acpi0 (TIMR, PNP0100): io 0x40-0x43,0x50-0x53 irq 0
[    1.011366] pckbc1 at acpi0 (PS2K, PNP0303) (kbd port): io 0x60,0x64 irq 1
[    1.011366] pckbc2 at acpi0 (PS2M, PNP0F03) (aux port): irq 12
[    1.011366] com0 at acpi0 (UAR1, PNP0501-1): io 0x3f8-0x3ff irq 4
[    1.011366] com0: ns16550a, 16-byte FIFO
[    1.011366] acpivga0 at acpi0 (VGA): ACPI Display Adapter
[    1.011366] acpiout0 at acpivga0 (LCD, 0x0110): ACPI Display Output Device
[    1.011366] acpiout0: brightness levels: [0-19]
[    1.011366] acpivga0: connected output devices:
[    1.011366] acpivga0:  0x0110 (acpiout0): LCD Panel, head 0
[    1.011366] acpivga1 at acpi0 (GFX0): ACPI Display Adapter
[    1.011366] acpiout1 at acpivga1 (DD01, 0x0100): ACPI Display Output Device
[    1.011366] acpiout2 at acpivga1 (DD02, 0x0400): ACPI Display Output Device
[    1.011366] acpiout2: brightness levels: [0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100]
[    1.011366] acpiout3 at acpivga1 (DD03, 0x0300): ACPI Display Output Device
[    1.011366] acpiout4 at acpivga1 (DD04, 0x0301): ACPI Display Output Device
[    1.011366] acpiout5 at acpivga1 (DD05, 0x0302): ACPI Display Output Device
[    1.011366] acpiout6 at acpivga1 (DD06, 0x0303): ACPI Display Output Device
[    1.011366] acpiout7 at acpivga1 (DD07, 0x0304): ACPI Display Output Device
[    1.011366] acpiout8 at acpivga1 (DD08, 0x0305): ACPI Display Output Device
[    1.011366] acpiout9 at acpivga1 (LCD, 0x0110): ACPI Display Output Device
[    1.011366] acpiout9: brightness levels: [0-19]
[    1.011366] acpivga1: connected output devices:
[    1.011366] acpivga1:  0x0110 (acpiout9): LCD Panel, head 0
[    1.011366] acpibut0 at acpi0 (PWRB, PNP0C0C-170): ACPI Power Button
[    1.011366] MEM2 (PNP0C01) at acpi0 not configured
[    1.011366] acpiwmi0 at acpi0 (WMID, PNP0C14-0): ACPI WMI Interface
[    1.011366] wmihp0 at acpiwmi0: HP WMI mappings
[    1.011366] acpifan0 at acpi0 (FAN0, PNP0C0B-0): ACPI Fan
[    1.011366] acpifan1 at acpi0 (FAN1, PNP0C0B-1): ACPI Fan
[    1.011366] acpifan2 at acpi0 (FAN2, PNP0C0B-2): ACPI Fan
[    1.011366] acpifan3 at acpi0 (FAN3, PNP0C0B-3): ACPI Fan
[    1.011366] acpifan4 at acpi0 (FAN4, PNP0C0B-4): ACPI Fan
[    1.011366] acpitz0 at acpi0 (TZ00)
[    1.011366] acpitz0: active cooling level 0: 71.0C
[    1.011366] acpitz0: active cooling level 1: 55.0C
[    1.011366] acpitz0: active cooling level 2: 0.0C
[    1.011366] acpitz0: active cooling level 3: 0.0C
[    1.011366] acpitz0: active cooling level 4: 0.0C
[    1.011366] acpitz0: levels: critical 105.0 C
[    1.011366] acpitz1 at acpi0 (TZ01): cpu0 cpu4 cpu1 cpu5 cpu2 cpu6 cpu3 cpu7
[    1.011366] acpitz1: levels: critical 105.0 C, passive 95.0 C, passive cooling
[    1.011366] ACPI: Enabled 4 GPEs in block 00 to 3F
[    1.011366] pckbd0 at pckbc1 (kbd slot)
[    1.011366] pckbc1: using irq 1 for kbd slot
[    1.011366] wskbd0 at pckbd0: console keyboard
[    1.011366] pms0 at pckbc1 (aux slot)
[    1.011366] pms0: autoconfiguration error: Failed to get E6 signature.
[    1.011366] pms0: autoconfiguration error: Failed to initialize an ALPS device.
[    1.011366] pckbc1: using irq 12 for aux slot
[    1.011366] wsmouse0 at pms0 mux 0
[    1.011366] pci0 at mainbus0 bus 0: configuration mode 1
[    1.011366] pci0: i/o space, memory space enabled, rd/line, rd/mult, wr/inv ok
[    1.011366] pchb0 at pci0 dev 0 function 0: Intel Ivy Bridge Host Bridge (rev. 0x09)
[    1.011366] ppb0 at pci0 dev 1 function 0: Intel Ivy Bridge PCI Express Root Port (rev. 0x09)
[    1.011366] ppb0: PCI Express capability version 2 <Root Port of PCI-E Root Complex> x16 @ 8.0GT/s
[    1.011366] pci1 at ppb0 bus 1
[    1.011366] pci1: i/o space, memory space enabled, rd/line, wr/inv ok
[    1.011366] nouveau0 at pci1 dev 0 function 0: NVIDIA product 107d (rev. 0xa1)
[    1.011366] hdaudio0 at pci1 dev 0 function 1: HD Audio Controller
[    1.011366] hdaudio0: interrupting at msi0 vec 0
[    1.011366] hdaudio0: HDA ver. 1.0, OSS 2, ISS 4, BSS 0, SDO 4, 64-bit
[    1.011366] hdafg0 at hdaudio0: NVIDIA product 001c
[    1.011366] hdafg0: DP00 8ch: Digital Out [Jack]
[    1.011366] hdafg0: DP01 8ch: Digital Out [Jack]
[    1.011366] hdafg0: 8ch/0ch 48000Hz PCM16*
[    1.011366] audio0 at hdafg0: playback, capture, full duplex, independent
[    1.011366] audio0: slinear_le:16 2ch 48000Hz, blk 1920 bytes (10ms) for playback
[    1.011366] audio0: slinear_le:16 2ch 48000Hz, blk 1920 bytes (10ms) for recording
[    1.011366] spkr0 at audio0: PC Speaker (synthesized)
[    1.011366] wsbell at spkr0 not configured
[    1.011366] i915drmkms0 at pci0 dev 2 function 0: Intel Ivy Bridge Integrated Graphics Device (rev. 0x09)
[    1.011366] xhci0 at pci0 dev 20 function 0: Intel 7 Series USB xHCI (rev. 0x04)
[    1.011366] xhci0: 64-bit DMA
[    1.011366] xhci0: interrupting at msi1 vec 0
[    1.011366] xhci0: xHCI version 1.0
[    1.011366] usb0 at xhci0: USB revision 3.0
[    1.011366] usb1 at xhci0: USB revision 2.0
[    1.011366] Intel 7 Series MEI Controller (miscellaneous communications, revision 0x04) at pci0 dev 22 function 0 not configured
[    1.011366] puc0 at pci0 dev 22 function 3: Intel 7 Series KT (com)
[    1.011366] com2 at puc0 port 0 (16550-compatible): ioaddr 0xf140, interrupting at ioapic0 pin 19
[    1.011366] com2: ns16550a, 16-byte FIFO
[    1.011366] wm0 at pci0 dev 25 function 0, 64-bit DMA: PCH2 LAN (82579LM) Controller (rev. 0x04)
[    1.011366] wm0: interrupting at msi2 vec 0
[    1.011366] wm0: PCI-Express bus
[    1.011366] wm0: 2048 words FLASH, version 0.13.4
[    1.011366] wm0: RX packet buffer size: 26KB
[    1.011366] wm0: Ethernet address 10:60:4b:81:4e:f0
[    1.011366] wm0: 0x6a4080<FLASH,PCIE,ASF_FIRM,AMT,WOL,EEE>
[    1.011366] ihphy0 at wm0 phy 2: i82579 10/100/1000 media interface, rev. 3
[    1.011366] ihphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-FDX, auto
[    1.011366] ehci0 at pci0 dev 26 function 0: Intel 7 Series USB EHCI (rev. 0x04)
[    1.011366] ehci0: 64-bit DMA
[    1.011366] ehci0: interrupting at ioapic0 pin 16
[    1.011366] ehci0: BIOS has given up ownership
[    1.011366] ehci0: EHCI version 1.0
[    1.011366] ehci0: Using DMA subregion for control data structures
[    1.011366] usb2 at ehci0: USB revision 2.0
[    1.011366] hdaudio1 at pci0 dev 27 function 0: HD Audio Controller
[    1.011366] hdaudio1: interrupting at msi3 vec 0
[    1.011366] hdaudio1: HDA ver. 1.0, OSS 4, ISS 4, BSS 0, SDO 1, 64-bit
[    1.011366] hdafg1 at hdaudio1: Realtek product 0221
[    1.011366] hdafg1: DAC00 2ch: Speaker [Built-In]
[    1.011366] hdafg1: DAC01 2ch: Speaker [Jack], HP Out [Jack]
[    1.011366] hdafg1: ADC02 2ch: Line In [Jack], Mic In [Jack]
[    1.011366] hdafg1: 2ch/2ch 44100Hz 48000Hz 96000Hz 192000Hz PCM16 PCM20 PCM24 AC3
[    1.011366] audio1 at hdafg1: playback, capture, full duplex, independent
[    1.011366] audio1: slinear_le:16 2ch 48000Hz, blk 1920 bytes (10ms) for playback
[    1.011366] audio1: slinear_le:16 2ch 48000Hz, blk 1920 bytes (10ms) for recording
[    1.011366] spkr1 at audio1: PC Speaker (synthesized)
[    1.011366] wsbell at spkr1 not configured
[    1.011366] hdafg2 at hdaudio1: Intel product 2806
[    1.011366] hdafg2: DP00 8ch: Digital Out [Jack]
[    1.011366] hdafg2: 8ch/0ch 48000Hz PCM16*
[    1.011366] audio2 at hdafg2: playback, capture, full duplex, independent
[    1.011366] audio2: slinear_le:16 2ch 48000Hz, blk 1920 bytes (10ms) for playback
[    1.011366] audio2: slinear_le:16 2ch 48000Hz, blk 1920 bytes (10ms) for recording
[    1.011366] spkr2 at audio2: PC Speaker (synthesized)
[    1.011366] wsbell at spkr2 not configured
[    1.011366] ppb1 at pci0 dev 28 function 0: Intel 7 Series PCIe (rev. 0xc4)
[    1.011366] ppb1: PCI Express capability version 2 <Root Port of PCI-E Root Complex> x4 @ 5.0GT/s
[    1.011366] ppb1: link is x1 @ 2.5GT/s
[    1.011366] pci2 at ppb1 bus 2
[    1.011366] pci2: i/o space, memory space enabled, rd/line, wr/inv ok
[    1.011366] ppb2 at pci2 dev 0 function 0: Texas Instruments product 8231 (rev. 0x03)
[    1.011366] ppb2: PCI Express capability version 1 <PCI-E to PCI/PCI-X Bridge>
[    1.011366] pci3 at ppb2 bus 3
[    1.011366] pci3: i/o space, memory space enabled, rd/line, wr/inv ok
[    1.011366] fwohci0 at pci3 dev 0 function 0: Texas Instruments product 8235 (rev. 0x01)
[    1.011366] fwohci0: interrupting at ioapic0 pin 16
[    1.011366] fwohci0: OHCI version 1.10 (ROM=1)
[    1.011366] fwohci0: No. of Isochronous channels is 4.
[    1.011366] fwohci0: EUI64 01:02:03:04:00:00:01:5a
[    1.011366] fwohci0: Phy 1394a available S400, 2 ports.
[    1.011366] fwohci0: Link S400, max_rec 2048 bytes.
[    1.011366] ieee1394if0 at fwohci0: IEEE1394 bus
[    1.011366] fwip0 at ieee1394if0: IP over IEEE1394
[    1.011366] fwohci0: Initiate bus reset
[    1.011366] fwohci0: Clear PME# now
[    1.011366] ppb3 at pci0 dev 28 function 4: Intel 7 Series PCIe (rev. 0xc4)
[    1.011366] ppb3: PCI Express capability version 2 <Root Port of PCI-E Root Complex> x1 @ 5.0GT/s
[    1.011366] ppb3: link is x1 @ 2.5GT/s
[    1.011366] pci4 at ppb3 bus 4
[    1.011366] pci4: i/o space, memory space enabled, rd/line, wr/inv ok
[    1.011366] wm1 at pci4 dev 0 function 0, 64-bit DMA: Intel i82574L (rev. 0x00)
[    1.011366] wm1: for TX and RX interrupting at msix4 vec 0 affinity to 1
[    1.011366] wm1: for TX and RX interrupting at msix4 vec 1 affinity to 2
[    1.011366] wm1: for LINK interrupting at msix4 vec 2
[    1.011366] wm1: PCI-Express bus
[    1.011366] wm1: 2048 words FLASH, version 1.8.0, Image Unique ID ffffffff
[    1.011366] wm1: ASPM L0s and L1 are disabled to workaround the errata.
[    1.011366] wm1: RX packet buffer size: 20KB
[    1.011366] wm1: Ethernet address 68:05:ca:1a:df:15
[    1.011366] wm1: 0x224080<FLASH,PCIE,ASF_FIRM,WOL>
[    1.011366] makphy0 at wm1 phy 1: Marvell 88E1149 Gigabit PHY, rev. 1
[    1.011366] makphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-FDX, auto
[    1.011366] ehci1 at pci0 dev 29 function 0: Intel 7 Series USB EHCI (rev. 0x04)
[    1.011366] ehci1: 64-bit DMA
[    1.011366] ehci1: interrupting at ioapic0 pin 23
[    1.011366] ehci1: BIOS has given up ownership
[    1.011366] ehci1: EHCI version 1.0
[    1.011366] ehci1: Using DMA subregion for control data structures
[    1.011366] usb3 at ehci1: USB revision 2.0
[    1.011366] ppb4 at pci0 dev 30 function 0: Intel 82801BA Hub-PCI Bridge (rev. 0xa4)
[    1.011366] pci5 at ppb4 bus 5
[    1.011366] pci5: i/o space, memory space enabled
[    1.011366] fxp0 at pci5 dev 0 function 0: i82558 Ethernet (rev. 0x04)
[    1.011366] fxp0: interrupting at ioapic0 pin 20
[    1.011366] fxp0: May need receiver lock-up workaround
[    1.011366] fxp0: Ethernet address 00:a0:c9:9a:8c:21
[    1.011366] inphy0 at fxp0 phy 1: i82555 10/100 media interface, rev. 0
[    1.011366] inphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
[    1.011366] ichlpcib0 at pci0 dev 31 function 0: Intel Q77 LPC (rev. 0x04)
[    1.011366] timecounter: Timecounter "ichlpcib0" frequency 3579545 Hz quality 1000
[    1.011366] ichlpcib0: 24-bit timer
[    1.011366] tco0 at ichlpcib0: TCO (watchdog) timer configured.
[    1.011366] tco0: Min/Max interval 1/367 seconds
[    1.011366] pciide0 at pci0 dev 31 function 2: Intel 7 Series (desktop) SATA Controller (rev. 0x04)
[    1.011366] pciide0: bus-master DMA support present, but unused (no driver support)
[    1.011366] pciide0: primary channel configured to native-PCI mode
[    1.011366] pciide0: using ioapic0 pin 19 for native-PCI interrupt
[    1.011366] atabus0 at pciide0 channel 0
[    1.011366] pciide0: secondary channel configured to native-PCI mode
[    1.011366] atabus1 at pciide0 channel 1
[    1.011366] ichsmb0 at pci0 dev 31 function 3: Intel 7 Series SMBus Controller (rev. 0x04)
[    1.011366] ichsmb0: interrupting at ioapic0 pin 18
[    1.011366] iic0 at ichsmb0: I2C bus
[    1.011366] pciide1 at pci0 dev 31 function 5: Intel 7 Series (desktop) SATA Controller (rev. 0x04)
[    1.011366] pciide1: bus-master DMA support present, but unused (no driver support)
[    1.011366] pciide1: primary channel wired to native-PCI mode
[    1.011366] pciide1: using ioapic0 pin 19 for native-PCI interrupt
[    1.011366] atabus2 at pciide1 channel 0
[    1.011366] pciide1: secondary channel wired to native-PCI mode
[    1.011366] atabus3 at pciide1 channel 1
[    1.011366] isa0 at ichlpcib0
[    1.011366] tpm0 at isa0 iomem 0xfed40000-0xfed40fff irq 7
[    1.011366] tpm0: device 0x000b15d1 rev 0x10
[    1.011366] pcppi0 at isa0 port 0x61
[    1.011366] spkr3 at pcppi0: PC Speaker
[    1.011366] wsbell at spkr3 not configured
[    1.011366] midi0 at pcppi0: PC speaker
[    1.011366] sysbeep0 at pcppi0
[    1.011366] attimer1: attached to pcppi0
[    1.011366] acpicpu0 at cpu0: ACPI CPU
[    1.011366] acpicpu0: C1: FFH, lat  1 us, pow  1000 mW
[    1.011366] acpicpu0: C2: FFH, lat  59 us, pow  500 mW
[    1.011366] acpicpu0: C3: FFH, lat  80 us, pow  350 mW
[    1.011366] acpicpu0: P0: FFH, lat  10 us, pow 77000 mW, 3401 MHz, turbo boost
[    1.011366] acpicpu0: P1: FFH, lat  10 us, pow 77000 mW, 3400 MHz
[    1.011366] acpicpu0: P2: FFH, lat  10 us, pow 73840 mW, 3300 MHz
[    1.011366] acpicpu0: P3: FFH, lat  10 us, pow 67694 mW, 3100 MHz
[    1.011366] acpicpu0: P4: FFH, lat  10 us, pow 64705 mW, 3000 MHz
[    1.011366] acpicpu0: P5: FFH, lat  10 us, pow 61772 mW, 2900 MHz
[    1.011366] acpicpu0: P6: FFH, lat  10 us, pow 58907 mW, 2800 MHz
[    1.011366] acpicpu0: P7: FFH, lat  10 us, pow 53315 mW, 2600 MHz
[    1.011366] acpicpu0: P8: FFH, lat  10 us, pow 50601 mW, 2500 MHz
[    1.011366] acpicpu0: P9: FFH, lat  10 us, pow 47940 mW, 2400 MHz
[    1.011366] acpicpu0: P10: FFH, lat  10 us, pow 42787 mW, 2200 MHz
[    1.011366] acpicpu0: P11: FFH, lat  10 us, pow 40284 mW, 2100 MHz
[    1.011366] acpicpu0: P12: FFH, lat  10 us, pow 37833 mW, 2000 MHz
[    1.011366] acpicpu0: P13: FFH, lat  10 us, pow 35433 mW, 1900 MHz
[    1.011366] acpicpu0: P14: FFH, lat  10 us, pow 31421 mW, 1700 MHz
[    1.011366] acpicpu0: P15: FFH, lat  10 us, pow 29164 mW, 1600 MHz
[    1.011366] coretemp0 at cpu0: thermal sensor, 1 C resolution, Tjmax=105
[    1.011366] acpicpu1 at cpu1: ACPI CPU
[    1.011366] coretemp1 at cpu1: thermal sensor, 1 C resolution, Tjmax=105
[    1.011366] acpicpu2 at cpu2: ACPI CPU
[    1.011366] coretemp2 at cpu2: thermal sensor, 1 C resolution, Tjmax=105
[    1.011366] acpicpu3 at cpu3: ACPI CPU
[    1.011366] coretemp3 at cpu3: thermal sensor, 1 C resolution, Tjmax=105
[    1.011366] acpicpu4 at cpu4: ACPI CPU
[    1.011366] acpicpu5 at cpu5: ACPI CPU
[    1.011366] acpicpu6 at cpu6: ACPI CPU
[    1.011366] acpicpu7 at cpu7: ACPI CPU
[    1.011366] fwohci0: BUS reset
[    1.011366] fwohci0: node_id=0xc800ffc0, gen=1, CYCLEMASTER mode
[    1.011366] ieee1394if0: 1 nodes, maxhop <= 0 cable IRM irm(0) (me)
[    1.011366] ieee1394if0: bus manager 0
[    1.011366] timecounter: Timecounter "clockinterrupt" frequency 100 Hz quality 0
[    1.011366] timecounter: Timecounter "TSC" frequency 3392297000 Hz quality 3000
[    1.226499] uhub0 at usb0: NetBSD (0x0000) xHCI root hub (0x0000), class 9/0, rev 3.00/1.00, addr 0
[    1.238427] uhub0: 4 ports with 4 removable, self powered
[    1.238427] uhub1 at usb1: NetBSD (0x0000) xHCI root hub (0x0000), class 9/0, rev 2.00/1.00, addr 0
[    1.268426] uhub1: 4 ports with 4 removable, self powered
[    1.288426] uhub2 at usb2: NetBSD (0x0000) EHCI root hub (0x0000), class 9/0, rev 2.00/1.00, addr 1
[    1.308426] uhub2: 3 ports with 3 removable, self powered
[    1.308426] uhub3 at usb3: NetBSD (0x0000) EHCI root hub (0x0000), class 9/0, rev 2.00/1.00, addr 1
[    1.328426] uhub3: 3 ports with 3 removable, self powered
[    1.328426] IPsec: Initialized Security Association Processing.
[    1.358427] tpm0: read 8 bytes, expected 10
[    1.378430] tpm0: deactivating entropy source
[    1.398426] wd0 at atabus0 drive 1
[    1.418426] wd0: <MTFDDAK128MAM-1J1>
[    1.438426] wd0: drive supports 16-sector PIO transfers, LBA48 addressing
[    1.438426] wd0: 119 GB, 248085 cyl, 16 head, 63 sec, 512 bytes/sect x 250069680 sectors
[    1.468426] wd0: GPT GUID: 0b27f7c4-74b3-401c-88cd-c0d8c16ad0c3
[    1.468426] dk0 at wd0: "Basic data partition", 1021952 blocks at 2048, type: <unknown>
[    1.488425] dk1 at wd0: "EFI system partition", 204800 blocks at 1024000, type: msdos
[    1.508425] dk2 at wd0: "Microsoft reserved partition", 32768 blocks at 1228800, type: ntfs
[    1.528425] dk3 at wd0: "10bd2c78-377a-4082-8212-c1176362ec16", 80660480 blocks at 1261568, type: ntfs
[    1.548425] autoconfiguration error: wd0: wedge named 'Basic data partition' already existed, using '10bd2c78-377a-4082-8212-c1176362ec16'
[    1.568425] dk4 at wd0: "NetBSD", 163839936 blocks at 81922112, type: ffs
[    1.588425] dk5 at wd0: "swap", 4307535 blocks at 245762112, type: swap
[    1.618425] wd0: drive supports PIO mode 4, DMA mode 2, Ultra-DMA mode 5 (Ultra/100)
[    1.618425] wd1 at atabus1 drive 0
[    1.638425] wd1: <WDC WD10EZEX-22BN5A0>
[    1.658425] wd1: drive supports 16-sector PIO transfers, LBA48 addressing
[    1.658425] wd1: 931 GB, 1938021 cyl, 16 head, 63 sec, 512 bytes/sect x 1953525168 sectors (4096 bytes/physsect)
[    1.748425] wd1: drive supports PIO mode 4, DMA mode 2, Ultra-DMA mode 6 (Ultra/133)
[    1.748425] wd2 at atabus1 drive 1
[    1.768424] wd2: <WDC WD5000AACS-00G8B0>
[    1.788424] wd2: drive supports 16-sector PIO transfers, LBA48 addressing
[    1.788424] wd2: 465 GB, 969021 cyl, 16 head, 63 sec, 512 bytes/sect x 976773168 sectors
[    2.328423] wd2: drive supports PIO mode 4, DMA mode 2, Ultra-DMA mode 6 (Ultra/133)
[    2.388433] uhub4 at uhub3 port 1: vendor 8087 (0x8087) product 0024 (0x0024), class 9/0, rev 2.00/0.00, addr 2
[    2.408421] uhub4: single transaction translator
[    2.428421] uhub5 at uhub2 port 1: vendor 8087 (0x8087) product 0024 (0x0024), class 9/0, rev 2.00/0.00, addr 2
[    2.448421] uhub5: single transaction translator
[    2.468421] uhub5: 6 ports with 6 removable, self powered
[    2.468421] uhub4: 8 ports with 8 removable, self powered
[    3.678417] umass0 at uhub5 port 1 configuration 1 interface 0
[    3.698416] umass0: Corsair (0x1b1c) Voyager 3.0 (0x1a03), rev 2.10/1.10, addr 3
[    3.718415] umass0: using SCSI over Bulk-Only
[    3.728415] scsibus0 at umass0: 2 targets, 1 lun per target
[    3.748415] sd0 at scsibus0 target 0 lun 0: <Corsair, Voyager 3.0, 000A> disk removable
[    3.768415] sd0: fabricating a geometry
[    3.788415] sd0: 29604 MB, 29604 cyl, 64 head, 32 sec, 512 bytes/sect x 60628992 sectors
[    3.818417] sd0: fabricating a geometry
[    4.188414] sd0: GPT GUID: 867794b8-d609-49ee-9c51-33a08260ec8b
[    4.188414] dk6 at sd0: "EFI system", 262144 blocks at 2048, type: msdos
[    4.208413] dk7 at sd0: "3c386667-4e85-4442-ac6e-943931e02174", 4853760 blocks at 264192, type: ffs
[    4.228413] dk8 at sd0: "ab4a17e6-df64-4eda-9827-8e4b3e9f52b9", 20480000 blocks at 5117952, type: ntfs
[    4.248413] autoconfiguration error: sd0: wedge named 'Basic data partition' already existed, using 'ab4a17e6-df64-4eda-9827-8e4b3e9f52b9'
[    22.818332] atapibus0 at atabus2: 2 targets
[    22.838331] cd0 at atapibus0 drive 0: <hp      CDDVDW SH-216BB, R8TM6YBD604VA1, HE50> cdrom removable
[    22.868333] cd0: drive supports PIO mode 4, DMA mode 2, Ultra-DMA mode 5 (Ultra/100)
[    22.868333] swwdog0: software watchdog initialized
[    23.588330] WARNING: 4 errors while detecting hardware; check system log.
[    23.588330] boot device: wd0
[    23.588330] root on dk4 dumps on dk5
[    23.608328] root file system type: ffs
[    23.608328] kern.module.path=/stand/amd64/10.1/modules
[    23.608328] nouveau0: NVIDIA GF119 (0d93d0a1)
[    23.788327] nouveau0: bios: version 75.19.79.00.02
[    23.938930] nouveau0: interrupting at msi5 vec 0 (nouveau0)
[    23.938930] nouveau0: fb: 512 MiB DDR3
[    24.248325] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[    24.248325] [drm] Driver supports precise vblank timestamp query.
[    24.248325] Zone  kernel: Available graphics memory: 9007199252161660 KiB
[    24.248325] Zone  dma32: Available graphics memory: 2097152 KiB
[    24.248325] nouveau0: DRM: VRAM: 512 MiB
[    24.248325] nouveau0: DRM: GART: 1048576 MiB
[    24.248325] nouveau0: DRM: TMDS table version 2.0
[    24.248325] nouveau0: DRM: DCB version 4.0
[    24.248325] nouveau0: DRM: DCB outp 00: 020003a6 0f220010
[    24.248325] nouveau0: DRM: DCB outp 01: 02000362 00020010
[    24.248325] nouveau0: DRM: DCB outp 02: 048113b6 0f220010
[    24.248325] nouveau0: DRM: DCB outp 03: 04011372 00020010
[    24.248325] nouveau0: DRM: DCB conn 00: 00410146
[    24.248325] nouveau0: DRM: DCB conn 01: 00820246
[    24.258325] nouveau0: DRM: MM: using COPY0 for buffer copies
[    24.258325] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[    24.258325] [drm] Driver supports precise vblank timestamp query.
[    24.278324] nouveau0: [drm] Cannot find any crtc or sizes
[    24.278324] [drm] Initialized nouveau 1.3.1 20120801 for nouveau0 on minor 0
[    24.278324] i915drmkms0: interrupting at msi6 vec 0 (i915drmkms0)
[    24.308324] [drm] Initialized i915 1.6.0 20200114 for i915drmkms0 on minor 1
[    24.338324] intelfb0 at i915drmkms0
[    24.338324] [drm] DRM_I915_DEBUG enabled
[    24.338324] [drm] DRM_I915_DEBUG_GEM enabled
[    24.338324] intelfb0: framebuffer at 0xd0005000, size 1280x1024, depth 32, stride 5120
[    24.408324] {drm:netbsd:intel_set_cpu_fifo_underrun_reporting+0x29c} *ERROR* uncleared fifo underrun on pipe A
[    24.408324] {drm:netbsd:intel_cpu_fifo_underrun_irq_handler+0x64} *ERROR* CPU pipe A FIFO underrun
[    24.408324] {drm:netbsd:intel_set_pch_fifo_underrun_reporting+0x14e} *ERROR* uncleared pch fifo underrun on pch transcoder A
[    24.408324] {drm:netbsd:cpt_irq_handler+0x217} *ERROR* PCH transcoder A FIFO underrun
[    24.738322] wsdisplay0 at intelfb0 kbdmux 1: console (default, vt100 emulation), using wskbd0
[    24.818322] wsmux1: connecting to wsdisplay0
[    32.278289] wsdisplay0: screen 1 added (default, vt100 emulation)
[    32.278289] wsdisplay0: screen 2 added (default, vt100 emulation)
[    32.278289] wsdisplay0: screen 3 added (default, vt100 emulation)
[    32.278289] wsdisplay0: screen 4 added (default, vt100 emulation)


February 06, 2025

NetBSD Package System (pkgsrc) on DaemonForums Getting GVFS to work on NetBSD 10.0 w/ XFCE4?
It's alive, autostarted by XFCE4 (or dbus?), but thunar shows nothing when plugging in USB drives. I can normally mount these disks with e.g.
Code:

mount /dev/sd0e /mnt
I've tried to search for the cause with no luck so far. GVFS doesn't seem to log anything and gvfs-* commands or their manpages don't help either. Has anyone idea what is maybe goin' on and how to fix it?
I'll try updating it to 10.1 on next time I have access to it, but I suspect problem is on GVFS side (It barely works in overall, even on Linux)

January 23, 2025

Emile Heitor Build A MMIO Booting Debian VM Out Of Cloud Images

As you might be aware of, I am working on a minimal BSD/UNIX system called smolBSD. It is based on the NetBSD operating system, and its main target is virtual machines, more specifically microvms. This system is capable of fully booting the OS in less than one second using a specially trimmed kernel along with small, specialized root systems.
I was stunned to learn (but am I wrong?) that this work does not seem to have an equivalent, not even in the Linux world. FreeBSD Firecracker support sure permits to boot a kernel is about the same time my NetBSD hacked kernel does, but there’s no work around s slim and task dedicated root filesystem.


January 19, 2025

DragonFly BSD Digest Lazy Reading for 2025/01/19

Quirky, just like I want it.

Your unrelated music link of the week: Where to Start With Tempa, The Label That Invented Dubstep.


January 17, 2025

Julio Merino Hands-on graphics without X11
If you have been following the development of EndBASIC, you know its console can display both text and graphics at once. What you may not know is that, now, it can also achieve this feat on the NetBSD console without using X11 at all. This is done by directly rendering to the wsdisplay framebuffer, and this article presents a crash course on direct graphics and keyboard access via NetBSD’s wscons framework.

January 10, 2025

Julio Merino Self-documenting Makefiles

Make, as arcane as a build tool can be, may still be a good first fit for certain scenarios. “Heresy!”, you say, as you hear a so-called “Bazel expert” utter these words.

The specific problem I’m facing is that I need to glue together the NetBSD build system, a quilt patch set, EndBASIC’s Cargo-based Rust build, and a couple of QEMU invocations to produce a Frankenstein disk image for a Raspberry Pi. And the thing is: Make allows doing this sort of stitching with relative ease. Sure, Make is not the best option because the overall build performance is “meh” and because incremental builds are almost-impossible to get right… but adopting Bazel for this project would be an almost-infinite time sink.

Anyway. When using Make in this manner, you often end up with what’s essentially a “command dispatcher” and, over time, the number of commands grows and it’s hard to make sense of which one to use for what. Sure, you can write a README.md with instructions, but I guarantee you that the text will get out of sync faster than you can read this article. There is a better way, though.


January 03, 2025

NetBSD Blog Google Summer of Code 2024 Reports: Test root device and root file system selection

This report was written by Diviyam Pat as part of Google Summer of Code 2024.

This summer I worked on NetBSD's kernel test framework to cover root device discovery and root file system selection. This area of the kernel is not very well documented and program flow has to be determined by reading the code.

I would also like to tell you about my early interactions with the project, let me start with project findings.

Why NetBSD?

Google Summer of Code 2024 is not my first time applying to GSoC. My first time was in 2022, in my first year of college. I have been fascinated with newer Windows versions since my Intel Core Duo i3 days as every new Windows version used to bring new changes and features, from Windows XP to Vista to 8.1 and then to 10 (cosmetic only) but was very heavy on my PC's memory usage that was upwards of 60% leaving very little room for applications and games.

My Intel i3 would be enough for it. This experience made me decide I wanted my project to be in the operating system space. I ventured into all OS projects on the Google Summer of Code website. Gentoo, Debian but that didn't turn out well. I then decided to explore BSDs. The community seemed friendlier, more responsive, and active in helping beginners. I started mailing all the mentors about my interests (I realized I should have done a lot more work before mailing them, it shows more dedication towards the project.)

Christoph explained the project in great detail to me, helped me with getting started and guided me through the hard parts of the project.

Project Details

Root device and file-system selection is made during the later stages of the boot process by the kernel. The kernel config file defines candidates for the root device and the kernel selects one after validating those options. If no options are defined, the auto config subroutines handle configuration. Head over to my docs for more details here. This functionality is handled primarily by the function setroot in file kern_subr.c. It also calls specialized functions for a number of cases. Our task was to add ATF tests for this function and some other functions that assist setroot. This part of the kernel works, and it has worked for over 30 years but the code is rather complex to read and there is no documentation. The only way to understand it is to read the code.

At any given stage when any condition fails the fallback option is to ask the user manually for the device. Thus this part of the kernel rarely needs attention. There are some global functions used in conditions inside setroot: rootspec, bootspec, etc. These variables are either set through the config file or through other machine-dependent kernel functions like findroot etc. We need to manually set them in our test cases and also need to stub kernel functions used by setroot and other functions. We wanted to make these test cases use 'vnd' devices, but we ran into bugs, and Christoph was trying to fix them. Therefore we had to resort to stubbing. We validate the global variables. We also test the tftproot_dhcpboot function that loads the contents of a memory disk device from a TFTP server and uses that as root device. Devices are represented by the device_t struct which is populated by the kernel. We mock this behavior through the create_device function and use this in the test programs. User input is handled by stubbing the cngetsn function. Global variables and arguments are set to test values in the body of the test cases and the function being tested is called. The test file is divided into 3 parts: 1) setroot_root, 2) setroot_ask, and 3) tftproot_dhcp. In the file kern_subr.c setroot() calls these functions but here we test them independently

Conclusion

I have worked on enhancing NetBSD's ATF tests to test the root device and file system selection process, testing the setroot function and its dependencies. These tests shall improve coverage of the ATF tests to the setroot function and in general, to root device selection. In the future, contributors can rely on these tests for kern_subr.c's functionality.


December 30, 2024

Stack Overflow How to build Visual Codium on NetBSD?

I am C++ developer and unfamiliar with script technologies like nodejs etc. I tried to build VS Codium on NetBSD 10.0 from sources 1.96.2 on github, by how-to manual. After running build/build.sh it outputs:

...
+++ ../update_settings.sh
300s/'default': true/'default': false/
sed: -E: No such file or directory
219s/'default': TelemetryConfiguration.ON/'default': TelemetryConfiguration.OFF/
sed: -E: No such file or directory
114s/'default': true/'default': false/
sed: -E: No such file or directory
#

When I look into target directory vscode I am seeing there something like result: vscode/cli/src/bin/code/main.rs How to continue with build to reach binary executable "bin/codium" ? What to do with that main.rs ? I read that it has something with rust ? Can anyone put more light on this to understand what to do ? I don't need to create installation package, it should be sufficient to run VSCodium from target build directory.


December 28, 2024

Julio Merino Revisiting the NetBSD build system

I recently picked up an embedded project in which I needed to build a highly customized full system image with minimal boot times. As I explored my options, I came to the conclusion that NetBSD, the often-forgotten BSD variant, was the best viable choice for my project.

One reason for this choice is NetBSD’s build system. Once you look and get past the fact that it feels frozen in time since 2002, you realize it is still one of the most advanced build systems you can find for an OS. And it shows: the 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.

Another reason for this choice is that NetBSD was my daily workhorse for many years and I’m quite familiar with its internals, which is useful knowledge to quickly achieve the goals I have in mind. In fact, I was a NetBSD Developer with capital D: I had commit access to the project from about 2002 through 2012 or so, and I have just revived my account in service of this project. jmmv@ is back!

So, strap onto your seats and let’s see how today’s NetBSD build system looks like and what makes it special. I’ll add my own critique at the end, because it ain’t perfect, but overall it continues to deliver on its design goals set in the late 1990s.


December 19, 2024

NetBSD Blog NetBSD 10.1 available!

The NetBSD project is pleased to announce the first update of the NetBSD 10 release branch NetBSD 10.1! See the release announcement for details.

This release includes 9 months of bug fixes and a few new features after the 10.0 release in March. It also gives those still using older release a good reason to finally update to the NetBSD 10 release branch, even if they avoid dot-zero releases by all means.

If you want to try NetBSD 10.1 please check the installation notes for your architecture and download the preferred install image from the CDN or if you are using an ARM based device from the netbsd-10 builds from the bootable ARM images page.

If you have any issues with installation or run into issues with the system during use, please contact us on one of the mailing lists or file a problem report.