You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

222 lines
4.9 KiB

+++
# vim: ft=markdown
title = 'OpenBSD-current'
summary = 'Keeping up to date with OpenBSD-current. Some quick notes.'
date = '2023-08-11T19:47:56+0000'
lastmod = '2023-08-19T21:30:15+0000'
categories = [ 'amateur-radio', 'computerstuff' ]
tags = [ 'openbsd' ]
# showBreadcrumbs = true
# showDate = false
# showReadingTime = false
# showWordCount = false
# showPagination = false
# feed_exclude = true
# site_exclude = true
draft = true
+++
[Initially]({{< ref "2023-07-29-going-back-from-openbsd-snapshot/index.md" >}}) I
wanted to not look at OpenBSD-current again but I did it again.
All went good this time and I could compile everything except the
ports. I'm still looking to find a good solution to update all
the packages in one run.
I'm still studying ports(7) and going to learn about bulk(8) and dpb(1).
## What went wrong the last time
I have no clue. The last time I had problems with the recent snapshot,
when the packages could not get updated properly. This time they updated
just fine. So maybe this was only an issue with that particular snapshot
back then. Maybe, <abbr title="I don't know">IDK</abbr>.
## Fetch the actual sources
The user is member of **wsrc**.
```console
$ cd /usr/src
$ cvs -q up -Pd -A
```
Initially we fetched the source with
```console
$ cd /usr
$ cvs -qd anoncvs@ftp.hostserver.de:/cvs checkout -P src
```
Same with `xenocara` and `ports`.
## Create the kernel
```console
$ cd /sys/arch/$(machine)/compile/GENERIC.MP
$ doas make obj
$ doas make config
$ doas make && doas make install
```
Is this really needed done as root (except install)?
Current kernel gets copied to /obsd and new kernel is /bsd.
Reboot with the new kernel.
## Build base system
```console
$ cd /usr/src
$ doas make obj && doas make build
```
```console
$ doas sysmerge
$ cd /dev && doas ./MAKEDEV all
```
My Lenovo X1 Carbon Gen7 finishes this step in <mark>~ 12 hours</mark> usually.
## Build and install Xenocara (X)
```console
$ cd /src/xenocara
$ doas make bootstrap
$ doas make obj
$ doas make build
```
Building Xenocara took on my laptop (see above) <mark>around 1.5 hours</mark>.
## Reboot
Once we built our new system, we want to boot into it.
## Upgrading the ports
I do have a packagelist of the manually installed packages in my home folder. That looks
something like this:
```
ImageMagick--
abook--
adb--
adwaita-icon-theme--
aircrack-ng--
alacritty--
anacron--
appstream-glib--
[...]
```
This is of no help to me, so I modified it a bit with sed:
```console
$ sed s/--// packagelist.txt > localports
```
That removes only the two minuses at the end.
Now I `cd` into `/usr/ports` and I'm looking if the
resulting category/package name fits the ports directory
structure.
```console
$ for i in `cat ~/localports`; do echo */$i; done | tee localports
```
Run the command without the `| tee ...` part to see if any errors occur.
If the for loop finishes without errors, we can add the `tee` part and
write the new localports file into `/usr/ports`.
The final file should look like this:
```
graphics/ImageMagick
mail/abook
devel/adb
security/aircrack-ng
x11/alacritty
sysutils/anacron
devel/appstream-glib
```
Notice, there is already the package `adwaita-icon-theme` misssing
because there is no such port in the ports tree.
Within `/usr/ports`, we run `dpb`:
```console
$ doas /usr/ports/infrastructure/bin/dpb -P localports
```
That's it. The screen gets filled with all the ports that
are updated at once/in parallel.
## Creating a release
There are a few steps needed to create your own installation media.
First of all, we setup some space that we can mount with
`noperm` options.
I use an external <abbr title="solid state disk">SSD</abbr>
which I mount into `/build`.
```console
$ doas mount -o noperm /dev/sd2a /build
```
Set the owner of this directory to build and chmod the directory
with 0700. Read along in [release]\(8).
[release]: https://man.openbsd.org/release
I use four directories: `dest`, `release`, `xdest` and `xrelease`.
`dist` and `xdest` will be used to build the system, while
`release` will hold the tarballs and the final installation media files
when in `xrelease` the Xenocara release files will land.
{{< alert >}}
Have a look at the **manpage**, permissions and owners are quite important
for these tasks!
{{< /alert >}}
### It is the base system that we create first
```console
$ export DESTDIR=/build/dest RELEASEDIR=/build/release
$ cd /usr/src/etc && doas make release
$ cd /usr/src/distrib/sets && doas sh checkflist
$ unset RELEASEDIR DESTDIR
```
### We continue with building the X release files
```console
$ export DESTDIR=/build/xdest RELEASEDIR=/build/xrelease
$ doas make release
$ doas make checkdist
$ unset RELEASEDIR DESTDIR
```
### Creating the installation media files
```console
$ export RELDIR=/build/release RELXDIR=/build/xrelease
$ cd /usr/src/distrib/$(machine)/iso && doas make
$ doas make install
```
You'll find your `install73.{img,iso}` files in `$RELDIR`.