|
|
|
+++
|
|
|
|
# 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-20T08:13:37+0000'
|
|
|
|
categories = [ '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 the [ports(7)], [bulk(8)] and [dpb(1)] manpages, as well as
|
|
|
|
the [release(8)] and [cvs(1)] pages.
|
|
|
|
|
|
|
|
[ports(7)]: https://man.openbsd.org/ports.7
|
|
|
|
[bulk(8)]: https://man.openbsd.org/bulk.8
|
|
|
|
[dpb(1)]: https://man.openbsd.org/dpb.1
|
|
|
|
[release(8)]: https://man.openbsd.org/release.8
|
|
|
|
[cvs(1)]: https://man.openbsd.org/cvs.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
|
|
|
|
```
|
|
|
|
|
|
|
|
This takes on my Lenovo X1 Carbon Gen7 something in between <mark>8 to 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 the [release man page][release].
|
|
|
|
|
|
|
|
[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
|
|
|
|
```
|
|
|
|
|
|
|
|
<!-- TODO:
|
|
|
|
fix time because I forgot them right now. its quicker than 1 hour i think IIRC -->
|
|
|
|
|
|
|
|
Time for coffe, the second line above takes around <mark>an hour</mark>.
|
|
|
|
This step creates a base installation of OpenBSD within `/build/dest` and
|
|
|
|
creates the installation media (tarballs) in `/build/release`.
|
|
|
|
|
|
|
|
### 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
|
|
|
|
```
|
|
|
|
|
|
|
|
<!-- TODO: set correct time consumation... -->
|
|
|
|
|
|
|
|
This run is fairly quick, expect <mark>a few minutes</mark> to run.
|
|
|
|
|
|
|
|
### Creating the installation media files
|
|
|
|
|
|
|
|
```console
|
|
|
|
$ export RELDIR=/build/release RELXDIR=/build/xrelease
|
|
|
|
$ cd /usr/src/distrib/$(machine)/iso && doas make
|
|
|
|
$ doas make install
|
|
|
|
```
|
|
|
|
|
|
|
|
Also this is done in a <mark>few minutes</mark>.
|
|
|
|
|
|
|
|
You'll find your `install73.img` and `install.iso` files in `$RELDIR`.
|
|
|
|
Ready to be used.
|
|
|
|
|
|
|
|
I sometimes upload these files [to my webserver][pub].
|
|
|
|
|
|
|
|
[pub]: http://bor.oe7drt.com/pub/OpenBSD/current/amd64/
|