Compare commits

...

65 Commits

Author SHA1 Message Date
c0dev0id
85cdfc8a50 Update 2025-07-23 10:26:24 2025-07-23 10:26:27 +02:00
c0dev0id
624014e561 Update 2025-07-21 15:12:30 2025-07-21 15:12:32 +02:00
c0dev0id
7b437c2d5e Update 2025-07-21 15:11:29 2025-07-21 15:11:36 +02:00
c0dev0id
0829e1e3f4 Update 2025-07-21 11:56:38 2025-07-21 11:56:40 +02:00
c0dev0id
ab17e26575 Update 2025-07-17 20:53:41 2025-07-17 20:53:43 +02:00
c0dev0id
1fddb706a1 Update 2025-07-17 20:45:09 2025-07-17 20:45:10 +02:00
c0dev0id
77f89e4534 Update 2025-07-16 13:41:05 2025-07-16 13:41:07 +02:00
c0dev0id
af2115dfb6 Update 2023-12-13 11:33:27 2023-12-13 11:33:28 +01:00
c0dev0id
1809e5d543 Update 2023-11-14 11:53:10 2023-11-14 11:53:11 +01:00
c0dev0id
c4d456d350 Update 2023-11-14 11:51:36 2023-11-14 11:51:38 +01:00
c0dev0id
e3459d2400 Update 2023-11-14 11:50:02 2023-11-14 11:50:04 +01:00
c0dev0id
c2e501ced0 Update 2023-11-14 11:49:11 2023-11-14 11:49:13 +01:00
c0dev0id
f660f3dd57 Update 2023-11-14 11:47:52 2023-11-14 11:47:53 +01:00
c0dev0id
53da307cc5 Update 2023-11-14 11:46:23 2023-11-14 11:46:25 +01:00
c0dev0id
6c9a2ff39c Update 2023-11-10 15:00:55 2023-11-10 15:00:57 +01:00
c0dev0id
4d9e70bdb4 Update 2023-11-10 14:58:16 2023-11-10 14:58:19 +01:00
c0dev0id
7adf17597f Update 2023-11-08 15:36:17 2023-11-08 15:36:19 +01:00
c0dev0id
7c10f7082b Update 2023-11-08 15:18:46 2023-11-08 15:18:48 +01:00
c0dev0id
921cff6ff3 Update 2023-11-08 15:17:55 2023-11-08 15:17:56 +01:00
c0dev0id
0c50697d29 Update 2023-11-08 15:16:11 2023-11-08 15:16:12 +01:00
c0dev0id
7e6aa558b2 Update 2023-11-08 15:15:43 2023-11-08 15:15:44 +01:00
c0dev0id
2034ddb2f6 Update 2023-11-08 15:15:02 2023-11-08 15:15:04 +01:00
c0dev0id
7b81e5c55e Update 2023-11-08 15:14:04 2023-11-08 15:14:05 +01:00
c0dev0id
92fdc0cda8 Update 2023-11-08 15:13:03 2023-11-08 15:13:05 +01:00
c0dev0id
e5ade45754 Update 2023-11-08 14:01:49 2023-11-08 14:01:50 +01:00
c0dev0id
14f7ca83ca Update 2023-11-08 12:54:03 2023-11-08 12:54:05 +01:00
c0dev0id
1a7c62c200 Update 2023-11-08 12:53:04 2023-11-08 12:53:06 +01:00
c0dev0id
15059fc197 Update 2023-11-08 12:52:41 2023-11-08 12:52:43 +01:00
c0dev0id
72de5ef596 Update 2023-11-08 11:27:16 2023-11-08 11:27:18 +01:00
c0dev0id
870492e4cb Update 2023-11-08 11:26:05 2023-11-08 11:26:07 +01:00
c0dev0id
4f49dd97cd Update 2023-11-08 11:19:30 2023-11-08 11:19:32 +01:00
c0dev0id
9088a1e1b9 Update 2023-11-08 11:19:02 2023-11-08 11:19:04 +01:00
c0dev0id
d1b93b0080 Update 2023-11-08 11:16:01 2023-11-08 11:16:03 +01:00
c0dev0id
fd88ea58f3 Update 2023-11-08 11:15:19 2023-11-08 11:15:21 +01:00
c0dev0id
181be357d1 Update 2023-11-08 11:13:39 2023-11-08 11:13:41 +01:00
c0dev0id
ab9f7452d6 Update 2023-11-08 11:13:12 2023-11-08 11:13:13 +01:00
c0dev0id
c63d161545 Update 2023-11-08 11:11:00 2023-11-08 11:11:02 +01:00
c0dev0id
b34e6012b3 Update 2023-11-08 11:09:45 2023-11-08 11:09:46 +01:00
c0dev0id
0e3f5a3490 Update 2023-11-08 11:09:11 2023-11-08 11:09:13 +01:00
c0dev0id
008fd84a8e Update 2023-11-08 11:06:38 2023-11-08 11:06:40 +01:00
c0dev0id
e2c984d2df Update 2023-11-06 13:21:38 2023-11-06 13:21:39 +01:00
c0dev0id
90ac97ef6b Update 2023-11-06 13:21:19 2023-11-06 13:21:20 +01:00
c0dev0id
ff6e92e279 Update 2023-11-06 11:38:11 2023-11-06 11:38:13 +01:00
c0dev0id
a8c4d51ffd Update 2023-11-06 11:26:38 2023-11-06 11:26:40 +01:00
c0dev0id
8ae56116a0 Update 2023-11-06 11:25:00 2023-11-06 11:25:02 +01:00
c0dev0id
d1776c487e Update 2023-11-06 11:24:10 2023-11-06 11:24:12 +01:00
c0dev0id
7b5408c8c9 Update 2023-11-06 11:20:36 2023-11-06 11:20:38 +01:00
c0dev0id
18139f2922 Update 2023-11-06 08:21:13 2023-11-06 08:21:15 +01:00
c0dev0id
b495fe4ace Update 2023-11-06 08:19:53 2023-11-06 08:19:55 +01:00
c0dev0id
a2b90202fc Update 2023-11-06 08:09:00 2023-11-06 08:09:02 +01:00
c0dev0id
a24b8a51b3 Update 2023-11-06 08:08:29 2023-11-06 08:08:30 +01:00
c0dev0id
c42d6ec7c7 Update 2023-11-06 08:04:38 2023-11-06 08:04:39 +01:00
c0dev0id
98271cdd41 Update 2023-11-03 13:49:16 2023-11-03 13:49:18 +01:00
c0dev0id
cf4a147140 Update 2023-11-03 13:48:17 2023-11-03 13:48:18 +01:00
c0dev0id
6603818525 Update 2023-11-03 13:39:21 2023-11-03 13:39:22 +01:00
c0dev0id
b7f5b681bb Update 2023-11-03 13:39:04 2023-11-03 13:39:05 +01:00
c0dev0id
30bb90a217 Update 2023-11-03 13:38:47 2023-11-03 13:38:48 +01:00
c0dev0id
4fd7e9aef0 Update 2023-11-03 13:37:55 2023-11-03 13:37:57 +01:00
c0dev0id
c69da79a65 Update 2023-11-03 13:37:28 2023-11-03 13:37:30 +01:00
c0dev0id
5bf28b4968 Update 2023-11-03 13:36:37 2023-11-03 13:36:38 +01:00
c0dev0id
50811355de Update 2023-11-02 21:48:11 2023-11-02 21:48:13 +01:00
c0dev0id
393873c30d Update 2023-11-02 21:47:40 2023-11-02 21:47:41 +01:00
c0dev0id
bf6dc8658f Update 2023-11-02 11:44:37 2023-11-02 11:44:39 +01:00
c0dev0id
8cfb259062 Update 2023-11-02 11:43 2023-11-02 11:43:25 +01:00
c0dev0id
084a65ca3a Update 2023-11-02 11:41:46 +01:00
29 changed files with 794 additions and 169 deletions

View File

@@ -1,5 +1,7 @@
src/assets src/assets
src/distfiles src/distfiles
src/static*
src/dl
src/favicon.* src/favicon.*
src/gpg.txt src/gpg.txt
src/images src/images

3
.gitignore vendored
View File

@@ -1,6 +1,9 @@
src/smokeping src/smokeping
src/paste src/paste
src/static
src/dl
src/distfiles src/distfiles
.control/* .control/*
.asciidoctor .asciidoctor
www/ www/
storage/

View File

@@ -19,6 +19,8 @@ PS_FILES != find src -type f -name "*.ps" | sed 's|src/||g'
PA_FILES != find src -type f -name "*.pa" | sed 's|src/||g' PA_FILES != find src -type f -name "*.pa" | sed 's|src/||g'
PT_FILES != find src -type f -name "*.pt" | sed 's|src/||g' PT_FILES != find src -type f -name "*.pt" | sed 's|src/||g'
COMMIT_MSG != echo "Update $$(date +"%Y-%m-%d %H:%M:%S")"
# put static files and dirs into .control/static-files. Globbing is supported. # put static files and dirs into .control/static-files. Globbing is supported.
STATIC_FILES != cat .control/static-files STATIC_FILES != cat .control/static-files
@@ -73,6 +75,11 @@ prepare:
echo "Mkdir: www" echo "Mkdir: www"
mkdir -p www mkdir -p www
git-commit:
git pull --autostash
git add src Makefile
git commit -m "$(COMMIT_MSG)" && git push || exit 0
copy-static-files: prepare copy-static-files: prepare
rsync -a --partial --delete --no-p --no-o --no-g --out-format="Copy: %f => www/" $(STATIC_FILES) www/ rsync -a --partial --delete --no-p --no-o --no-g --out-format="Copy: %f => www/" $(STATIC_FILES) www/
@@ -84,12 +91,13 @@ _clean:
install: install:
make -s _install make -s _install
make -s git-commit
_install: website _install: website
echo "Fixing Permissions in www/" echo "Fixing Permissions in www/"
doas chown -R sdk:www www doas chown -R sdk:www www
doas chmod -R ugo+Xrw www doas chmod -R ugo+Xrw www
echo "Deploy: www/ => /var/www/htdocs/" echo "Deploy: www/ => /var/www/htdocs/"
cd www && doas rsync -a --partial --delete --exclude "*/cache/*" --out-format="Deploy: %f => /var/www/htdocs/%f" * $(REMOTE) cd www && doas rsync -a -o -g -p --inplace --partial --delete --exclude "*/cache/*" --out-format="Deploy: %f => /var/www/htdocs/%f" * $(REMOTE)
#### HELPER TARGETS #### #### HELPER TARGETS ####

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -26,6 +26,15 @@ code, pre {
font-family: fira mono regular; font-family: fira mono regular;
} }
pre {
overflow-x: auto;
}
tr td:first-child {
white-space:nowrap;
vertical-align: top;
}
a { a {
text-decoration: none; text-decoration: none;
} }
@@ -59,3 +68,7 @@ a {
border-color: black; border-color: black;
border-style: solid none none none; border-style: solid none none none;
} }
.monospace {
letter-spacing: 1px;
}

45
src/drafts.ps Normal file
View File

@@ -0,0 +1,45 @@
#!/bin/ksh
# chdir to working directory
cd src/posts
cat <<'EOF'
<h1>
Welcome!
</h1>
<p>
Welcome to my little place on the web. It may not been the pretties
you've seen today, but it's all self made.
</p>
<h2>
Posts
</h2>
<ul>
EOF
# print list
ls -r1 *.ps *.pm *.ph *.pa *.pt 2>/dev/null | fgrep '.draft.' | while read line
do
if [ $(echo "${line##*.}") == "pm" ]
then
TITLE="$(head -1 "$line" | sed 's/^# //g')"
else
TITLE="$(echo "${line%%.*}" | tr '_' ' ')"
fi
URI="posts/${line%.*}.html"
cat <<EOF
<li>
<a href="$URI">
$TITLE
</a>
</li>
EOF
done
cat <<EOF
</ul>
EOF

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 350 B

After

Width:  |  Height:  |  Size: 932 B

View File

@@ -1,5 +1,5 @@
</article> </article>
<div>-- <br>Proudly made with vim and bsd make.</div> <div><br>-- <br>hacked together with <a href="https://www.vim.org">vim</a> and <a href="https://man.openbsd.org/make">make</a></div>
</body> </body>
</html> </html>

View File

@@ -11,112 +11,126 @@ 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
=ZR0P ku30I//7XObUHuq/mprNO2O7OaLCPrXirRbqbXJtdmBl13CkqPYaDwTnmg0G+4sH
3ukAEQEAAYkCPAQYAQoAJhYhBMvTxGhktGUX6Pu5D7a8LsVSvkO6BQJfGxZUAhsg
BQkGfSIAAAoJELa8LsVSvkO6ap8P+wUmTfv3yUr7Khz4zmuJptPuVKIPrJUkux2R
cl+okt3DMxjzcmMBoXmehtXQxFXEyZDTwoFvvNV6nqgrV1zLS3eo8sjECzqJmNcE
7lnhk6bgxrDIKBeQKIS915Hm3kOhBlkbj/VTnG12P4Jj5tuRLR7KSaupTBGO2CSY
XIwf7/PGzHB5azKno0uLculkTCkpzmcOXRCpP5JGk7YQAmgDgv+3CVciysJxV5Wh
tFqNsGkPOyI9M/pYATzTurAHvIvjiiK6JJj+2JyAFLQXwNKTGU6mbYUxCCRaR33C
RmOzmgjNJK9U/7NdC6a4+taMneMx93GtS48IYHLqPj+KA+vpqbRFj4aLrr3mYB/+
EbM+T9TBc88EiM0JKqwisNb5nINLaFnv7+VHQpXO2hrdHysFsh3PO2bFdo1/FK2x
ABJT9JKmHIPq7KTUgPsu0y+eGDeSyB+UC33vM6F8UT2vdYUOTz9F9e4X5dWcFw2a
nz0r9dkI9Fvbb3glQNEgaEmXaeheyDdTcBxFD5npbHrvNvrEqKIjSDsDWUiXRsK1
pwgbZliUvHYxbxcCTWS5h3LcL8QcGLfWkyJUFPAM2Dq2nMY3ayf1lAQ/OExISgKt
n/77zM6XpcV6NGInnI8O//lP4febHZ/17x9Z+E/M1BPrswLuEZK++0R7gTmj7vaV
zCmgKolO
=AIp+
-----END PGP PUBLIC KEY BLOCK----- -----END PGP PUBLIC KEY BLOCK-----

View File

@@ -1,4 +1,4 @@
<html lang="en,de"> <html lang="en,de">
<head> <head>
<title>CODEVOID</title> <title>CODEVOID</title>
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
@@ -8,13 +8,13 @@
<body> <body>
<header> <header>
<div class="header-title"> <div class="header-title">
<a href="/">codevoid</a> <a href="/">CODEVOID</a>
</div> </div>
</header> </header>
<div class="header-row"> <div class="header-row">
<a class="header-item" href="/distfiles">Distfiles</a> <a class="header-item" href="/distfiles">Distfiles</a>
<a class="header-item" href="/paste">Pastebin</a> <a class="header-item" href="/paste">Pastebin</a>
<a class="header-item" href="/smoke">Smokeping</a> <a class="header-item" target="_new" href="/smokeping">Smokeping</a>
</div> </div>
<div class="header-line"></div> <div class="header-line"></div>
<article> <article>

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0V0z"/><path d="M19 18l2 1V3c0-1.1-.9-2-2-2H8.99C7.89 1 7 1.9 7 3h10c1.1 0 2 .9 2 2v13zM15 5H5c-1.1 0-2 .9-2 2v16l7-3 7 3V7c0-1.1-.9-2-2-2z"/></svg>

Before

Width:  |  Height:  |  Size: 263 B

View File

@@ -8,33 +8,42 @@ cat <<'EOF'
Welcome! Welcome!
</h1> </h1>
<p> <p>
Welcome to my little place on the web. It may not been the pretties Welcome to my little place on the web.
you've seen today, but it's all self made.
</p> </p>
<h2> <h2>
Posts Posts
</h2> </h2>
<ul> <table>
EOF EOF
# print list # print list
ls -r1 | while read line ls -r1 *.ps *.pm *.ph *.pa *.pt 2>/dev/null | fgrep -v '.draft.' | while read line
do do
TITLE="$(echo "${line%%.*}" | tr '_' ' ')" echo "<tr>"
URI="posts/${line%%.*}.html" DATE="$(echo "$line" | cut -d"_" -f1 )"
if [ $(echo "${line##*.}") == "pm" ]
then
TITLE="$(head -1 "$line" | sed 's/^# //g')"
else
TITLE="$(echo "${line%%.*}" | tr '_' ' ')"
fi
URI="posts/${line%.*}.html"
cat <<EOF cat <<EOF
<li> <td>
$DATE
</td>
<td>
<a href="$URI"> <a href="$URI">
$TITLE $TITLE
</a> </a>
</li> </td>
EOF EOF
echo "</tr>"
done done
cat <<EOF cat <<EOF
</ul> </table>
EOF EOF

View File

@@ -1,4 +1,4 @@
# Manage Dotfiles With Git # Manage Dotfiles with Git
I'm managing my dotfiles with git. My method serves me well for a few I'm managing my dotfiles with git. My method serves me well for a few
years already and so I think it's time to write it down. years already and so I think it's time to write it down.
@@ -90,3 +90,4 @@ I'm maintaining a "work branch" on top of my "main" (private) branch.
This work branch even has a different upstream (corporate git repository This work branch even has a different upstream (corporate git repository
at work). But I'm still able to access changes I made to my private git at work). But I'm still able to access changes I made to my private git
repository and merge them as I like (or vise versa). repository and merge them as I like (or vise versa).
* 2023-11-06:

View File

@@ -1,34 +0,0 @@
# LineageOS on Motorola Z2 Force
Whenever there is a major LineageOS Update, chances are that I forgot
the flashing process. So here are the notes.
Disclaimer: Due to the missing tools to flash from OpenBSD, I use my
work computer, which runs windows.
Required Downloads:
* [Android Platform Tools](https://dl.google.com/android/repository/platform-tools-latest-windows.zip) (contains adb and fastboot)
* [Motorola Smart Assistant](https://support.lenovo.com/us/en/downloads/ds101291) (contains USB drivers for fastboot)
Prepare:
- Install motorola smart assistant
- Extract platform-tools make sure you're in the platform tools
directory or that they are in your $PATH.
Update steps:
- p[hone]: Boot into bootloader (power+down)
- c[omputer]: fastboot flash boot_a \<lineageos_recovery\>.img
- c: fastboot flash boot_b \<lineageos_recovery\>.img
- p: Boot into bootloader (power+down) -\> Boot Recovery
- p: Factory Reset -\> Wipe data / factory reset + Wipe System
- p: Apply update -\> adb sideload
- c: adb sideload \<lineageos\>.zip
- c: adb sideload \<addons\>.zip
- p: Reboot
Notes:
* "adb devices" works without USB drivers
* "fastboot devices" shows nothing if USB drivers are not installed
* This phone has two boot areas and therefore "fastboot flash boot" will
fail. The areas "boot_a" and "boot_b" must be used instead. If "boot_a"
and "boot_b" are flashed differently, booting will fail.

View File

@@ -0,0 +1,33 @@
# LineageOS on Motorola Z2 Force
Whenever there is a major LineageOS Update, chances are that I forgot the flashing process. So here are the notes.
Disclaimer: Due to the missing tools to flash from OpenBSD, I use my work computer, which runs windows.
## Required Downloads:
- [Android Platform Tools](https://dl.google.com/android/repository/platform-tools-latest-windows.zip) (contains adb and fastboot)
- [Motorola Smart Assistant](https://support.lenovo.com/us/en/downloads/ds101291) (contains USB drivers for fastboot)
## Prepare:
- Install motorola smart assistant
- Extract platform-tools make sure you're in the platform tools directory or that they are in your `$PATH`.
## Update steps:
- p[hone]: Boot into bootloader (power+down)
- c[omputer]: fastboot flash boot_a <lineageos_recovery>.img
- c: fastboot flash boot_b <lineageos_recovery>.img
- p: Boot into bootloader (power+down) -> Boot Recovery
- p: Factory Reset -> Wipe data / factory reset + Wipe System
- p: Apply update -> adb sideload
- c: adb sideload <lineageos>.zip
- c: adb sideload <addons>.zip
- p: Reboot
## Notes:
- "adb devices" works without USB drivers
- "fastboot devices" shows nothing if USB drivers are not installed
- This phone has two boot areas and therefore "fastboot flash boot" will fail. The areas "boot_a" and "boot_b" must be used instead. If "boot_a" and "boot_b" are flashed differently, booting will fail.

View File

@@ -8,7 +8,7 @@ However, in other operating systems, there is a global toggle for dark
mode, which also switches the browser into it. This is not the case on mode, which also switches the browser into it. This is not the case on
linux and unix systems. linux and unix systems.
# Chrome / Chromium / Iridium # Chromium based browsers
Chrome and Chromium starting with version 73 can be tought to start in Chrome and Chromium starting with version 73 can be tought to start in
dark mode: dark mode:

View File

@@ -0,0 +1,14 @@
# Why OpenBSD?
## Where I'm coming from
I'm basically left the Windows Ecosystem after Windows 95 and moved to Debian Linux 3.0.
I left Debian Linux, when they switched to systemd, but this was just the final straw to a system that gets more and more bloated. I then moved to FreeBSD.
I felt at home at FreeBSD for a while until I realized how broken many concepts are and that it's bascially impossible to contribute via their bug tracker.
Then, after some ranting about FreeBSD on Github, an OpenBSD developer asked me to check out OpenBSD and how they do things.
One day, I did. And never looked back.
## Why is OpenBSD right for me
OpenBSD is an opinionated system. Some things work a certain way and they are not supposed to be changed.

View File

@@ -0,0 +1,241 @@
# OpenBSD Install Guide
Let's walk through an OpenBSD Installation, shall we?
## Download
Let's quikly hop over to https://www.openbsd.org/faq/faq4.html#Download (or openbsd.org -> Download) and grab the miniroot74.img. Then `dd` it to an USB stick.
It's also assumed that you have network access, using an ethernet cable.
After starting from the USB stick, you're greeted with the installer prompt.
```
Welcome to the OpenBSD/amd64 7.4 installation program.
(I)nstall, (U)pgrade, (A)utoinstall or (S)hell? I
```
The right answer her is "I"
Next, you will see this little text:
```
At any prompt except password prompts you can escape to a shell by
typing '!'. Default answers are shown in []'s and are selected by
pressing RETURN. You can exit this program at any time by pressing
Control-C, but this can leave your system in an inconsistent state.
```
People tend to not read it. So let me spell it out again: On most questions in the installer, you can enter "!" to get to a shell. When you quit the shell, the installer continues.
```
Choose your keyboard layout ('?' or 'L' for list) [default] de
```
The default is US querty on the amd64 platform. So default doesn't mean autodetect. You can display the list of available layouts with L or ?. I have a german keyboard, so I enter "de" here.
```
System hostname? (short form, e.g. 'foo') puffy
```
Well, my computer shall be called by the name "puffy". So I enter that.
```
Available network interfaces are: re0 iwx0 vlan0.
Network interface to configure? (name, lladdr, '?', or 'done') [re0]
```
This can be a tricky one for first timers. Ideally you can research the device names on another device. They have manpages (without the number) so figure out on https://man.openbsd.org/re.4 what kind of device what it is.
If you don't have that option, you can make use of the "!" feature to look at the boot message again and see if the devices come with a meaningful description.
```
Network interface to configure? (name, lladdr, '?', or 'done') [re0] !
Type 'exit' to return to install.
puffy #
puffy# dmesg | grep ^iwx0
iwx0 at pci3 dev 0 function 0 "Intel Wi-Fi 6 AX200" rev 0x1a, msix
puffy# dmesg | grep ^re0
re0 at pci2 dev 0 function 0 "Realtek 8168" rev 0x0e: RTL8168EP/8111EP (0x5000), msi, address 8c:8c:aa:d7:23:f1
puffy# exit
Network interface to configure? (name, lladdr, '?', or 'done') [re0]
```
Now I have an idea what these devices are. Iwx0 is my wireless device. However, I can't use it yet, because it needs a firmware which is not available at install time. You can use wifi to set up OpenBSD, but you need a wifi adapter that works without firmware. I know that [run(4)](https://man.openbsd.org/run.4) and [urtwn(4)](https://man.openbsd.org/urtwn.4) work. The installer will list them accordingly as run0 and urtwn0.
Therefore we go with the ethernet device, which is re0 in this case. The suggestion in square brackets is what I use, so I don't need to enter it again. Just slapping enter here.
```
IPv4 address for re0? (or 'autoconf' or 'none') [autoconf]
Using DNS nameservers at 192.168.1.1
Using DNS domainname home.codevoid.de
```
My home network runs with DHCP, so IPs are handed out by my router. That's another slap on enter.
If your dhcp server does not hand out a domain name, you will get asked for it. If you don't know it, just go with the default. You can always change it later.
```
IPv6 address for re0? (or 'autoconf' or 'none') [none]
```
The next question is regarding IPv6... and we don't need that for the installation right now. If you need it, enter "autoconf". For me, ist's yet another slap on enter.
```
Network interface to configure? (name, lladdr, '?', or 'done') [done]
```
We know this question already. It's repeated in case we want to configure another device. The default has switched to "done", which means we're done configuring devices. Slap. On. Enter.
```
Password for root account? (will not echo)
Password for root account? (again)
```
Enter your root password twice + enter.
```
Start sshd(8) by default? [yes]
```
Aaand yes. Enter.
```
Setup a user? (enter a lower-case loginname, or 'no') [no]
```
I setup my system user here. Please note that this is not a yes/no question. It's a no/username question.
```
Setup a user? (enter a lower-case loginname, or 'no') [no] sdk
Full name for user sdk? [sdk] Stefan
Password for user sdk? (will not echo)
Password for user sdk? (again)
```
Enter all the things...
```
WARNING: root is targeted by password guessing attacks, pubkeys are safer.
Allow root ssh login? (yes, no, prohibit-password) [no]
```
Remote ssh logons root are _never_ a good idea. So the only sane answers here are "no" and "prohibit-password". I'm going with the default here. Slap.
```
Available disks are: sd0 sd1.
Which disk is the root disk? ('?' for details) [sd0]
```
On which disk do we want to install OpenBSD? The default here is just the first available disk and this might be wrong. Fortunately, we don't need to do the "!"-shell dance on this question. A simple "?" shows a list of installed disks with description.
```
Which disk is the root disk? ('?' for details) [sd0] ?
sd0: NVMe, Samsung SSD 980, 3B2Q (1863.0G)
sd1: Lexar, USB Flash Drive, 1100 (16.0G)
Available disks are: sd0 sd1.
Which disk is the root disk? ('?' for details) [sd0]
```
So, yeah, sd0 looks right. And ... enter, slap.
```
Encrypt the root disk with a (p)assphrase or (k)eydisk? [no] p
```
Here we can go with no encryption "no". Or we can answer "k" if we have a keydisk prepared. The installer doesn't help with that (yet?). So I'm going with a traditional password here. "p", slap.
```
Configuring the crypto chunk sd0...
Disk: sd0 geometry: 522/255/63 [8388608 Sectors]
Offset: 0 Signature: 0xAA55
Starting Ending LBA Info:
#: id C H S - C H S [ start: size ]
-------------------------------------------------------------------------------
0: 00 0 0 0 - 0 0 0 [ 0: 0 ] Unused
1: 00 0 0 0 - 0 0 0 [ 0: 0 ] Unused
2: 00 0 0 0 - 0 0 0 [ 0: 0 ] Unused
*3: A6 0 1 2 - 522 42 32 [ 64: 8388544 ] OpenBSD
Use (W)hole disk MBR, whole disk (G)PT, (O)penBSD area or (E)dit? [OpenBSD] W
```
This screen will look differnt for you the partition layout on the disk "right now".
The installer looks for an "OpenBSD" typed partition. If you have one already, it suggests to use it.
You can also choose "E", which is start [fdisk(1)](https://man.openbsd.org/fdisk.1) and let's you configure the partitions and create an OpenBSD partition somewhere, so the installer can continue.
Most people would tell the installer to use the whole disk. The two options "W" and "G" are using the whole disk. Choose "W" for BIOS based systems and "G" for UEFI based system.
I'm using an older computer, so my choice is "W".
```
Setting OpenBSD MBR partition to whole sd0...done.
New passphrase:
Re-type passphrase:
sd2 at scsibus2 targ 1 lun 0: <OPENBSD, SR CRYPTO, 006>
sd2: 4095MB, 512 bytes/sector, 8388016 sectors
Configuring the root disk sd2...
No valid MBR or GPT.
Use (W)hole disk MBR, whole disk (G)PT or (E)dit? [whole]
```
I said I wanted the disk encrypted, so now is the time to enter the password twice and watch the system configuring the encrypted loop device.
But... now it asks the same question again - why?
Encryption on OpenBSD works using crypto device. This means /dev/sd0 is now encrypted and the data on this device makes no sense. But there is a driver in place, that can read this mess and decrypt it. This driver provides a new device (sd2 in this case), which is used from the system from now on.
So we have the choice again for the encrypted volume. How do we want to partition it?
To my knowledge the only answer here can be "whole". If anyone knows a usecase for the other options - please tell me.
```
Setting OpenBSD MBR partition to whole sd2...done.
The auto-allocated layout for sd2 is:
# size offset fstype [fsize bsize cpg]
a: 883.0M 64 4.2BSD 2048 16384 1 # /
b: 246.0M 1808384 swap
c: 4095.7M 0 unused
d: 2594.5M 2312128 4.2BSD 2048 16384 1 # /usr
e: 372.2M 7625728 4.2BSD 2048 16384 1 # /home
Use (A)uto layout, (E)dit auto layout, or create (C)ustom layout? [a]
```
TODO: slices.
```
/dev/rsd2a: 883.0MB in 1808320 sectors of 512 bytes
5 cylinder groups of 202.50MB, 12960 blocks, 25920 inodes each
newfs: reduced number of fragments per cylinder group from 47640 to 47256 to enlarge last cylinder group
/dev/rsd2e: 372.2MB in 762272 sectors of 512 bytes
5 cylinder groups of 92.30MB, 5907 blocks, 11840 inodes each
/dev/rsd2d: 2594.5MB in 5313600 sectors of 512 bytes
13 cylinder groups of 202.50MB, 12960 blocks, 25920 inodes each
Available disks are: sd1.
Which disk do you wish to initialize? (or 'done') [done]
```
TODO: slap
```
/dev/sd2a (9c585400ea3f9907.a) on /mnt type ffs (rw, asynchronous, local)
/dev/sd2e (9c585400ea3f9907.e) on /mnt/home type ffs (rw, asynchronous, local, nodev, nosuid)
/dev/sd2d (9c585400ea3f9907.d) on /mnt/usr type ffs (rw, asynchronous, local, nodev)
Let's install the sets!
Location of sets? (disk http nfs or 'done') [http]
```
```
HTTP proxy URL? (e.g. 'http://proxy:8080', or 'none') [none]
```
```
HTTP Server? (hostname or 'done') ftp.hostserver.de
```

View File

@@ -0,0 +1,78 @@
# OpenBSD: base and package management
Note, each of the commands comes with a man page, which I encourage you to read. This post is merely to get you started. Also note, that there is [afterboot(8)](https://man.openbsd.org/afterboot).
## Base System
### Upgrade OpenBSD to the next version (will reboot)
```
# sysupgrade
```
### Update base system configuration files after an OpenBSD upgrade
```
# sysmerge
```
### Install security updates for the base system
```
# syspatch
```
### Update firmware
This does not need to be run manually. It's only relevant when you install hardware which needs a firmware and which was not present during the installation or the last upgrade.
```
# fw_update
```
## Add On Package System
### Search for a package
```
# pkg_info -Q xfce
```
### Install a package
```
# pkg_add xfce
```
### Uninstall a package
```
# pkg_delete xfce
# pkg_delete -c xfce # also remove configuration
```
### Deinstall leftover dependencies
```
# pkg_delete -a
# pkg_delete -ac # also remove configuration
```
### Update packages
```
# pkg_add -u
```
### Check/repair package database
This command is only relevant if you see errors during `pkg_add`. This can happen if your system crashes while updating, which may get the package database into a weird state. If you don't know the answers to pkg_checks questions, deinstalling and reinstalling the package in question usually solves the problem.
```
# pkg_check
```
### Deinstall all packages on the system
```
# pkg_delete -X
```

View File

@@ -0,0 +1,146 @@
# OpenBSD: a simple laptop network setup (with dhcp)
Note, each of the commands comes with a man page, which I encourage you to read. This post is merely to get you started.
## Manuel Ethernet Device Setup
List available network devices and configuration
```
# ifconfig
```
Typical ethernet devices are `em0`, `bge0`, `re0`. Look at the manpage of [em(4)](https://man.openbsd.org/em.4), [bge(4)](https://man.openbsd.org/bge.4) or any other device you might find to learn about what it is.
You can configure these devices with
```
# ifconfig <device> <option>
```
Read [ifconfig(8)](https://man.openbsd.org/ifconfig.8) to learn about available options.
In a typical home network with dhcp, you would type something like this
```
# ifconfig em0 inet autoconf
```
If you want to add IPv6 connectivity do the same with "inet6"
```
# ifconfig em0 inet6 autoconf
```
As a last step, you need to activate the device
```
# ifconfig em0 up
```
## Manuel Wireless Device Setup
Typical wireless devices are `run0`, `iwx0`, `iwn0`, `iwm0`. They have manpages as well look up the device name without number.
You connect a wireless device to your network without
```
# ifconfig iwx0 nwid MyNetworkSSID wpakey MyWifiPassword
```
Once this is done, the configuration can continue like with an ethernet device
```
# ifconfig iwx0 inet autoconf
# ifconfig iwx0 inet6 autoconf # for IPv6
# ifconfig iwx0 up
```
To remove the IPv6 configuration from an interface, you can do
```
# ifconfig iwx0 -inet6
```
Most confgurations can be removed this way.
## Setting the configuration active without restarting
If you changed the `/etc/hostname.*` files, you can reconfigure the network with the netstart shell script
```
# sh /etc/netstart
```
Note that this script adds the confguration to devices as specified. If you remove a `/etc/hostname.*` file, netstart will not know about this device and ignore it.
## Making the configuration permanent
The concept of storing the network device setup is decribed in the manpage [hostname.if(5)](https://man.openbsd.org/hostname.if.5).
A typical configuration for a wireless device would look like this
```
# cat /etc/hostname.iwx0
join MyHomeNetworkSSID wpakey MyHomeWifiPassword
join MyWorkNetworkSSID wpakey MyWorkWifiPassword
inet autoconf
inet6 autoconf
up
```
You may recognise these commands from the manual configuration. The file is named `hostname.<device>` and it basically contains the ifconfig commands that you can also add after `ifconfig <device>`.
Note that I added two `join` commands here instead of `nwid`. The difference is, that `nwid` connects to exactly one wifi network, while `join` builds up a list of multiple networks that are tried in order. If you only have one network to connect to, it makes no difference if you use "nwid" or "join".
You can clear the join list just like you can remove any other configuration from a device.
```
# ifconfig iwx0 -join
```
This `/etc/hostname.<device>` based configuration makes it easy to copy configuration to another device
```
# cp /etc/hostname.iwx0 /etc/hostname.run0
```
## Switching between Wifi and Ethernet without interrupting the connection
You can create a [trunk(4)](https://man.openbsd.org/trunk.4) device, which internally switches between your ethernet and your wireless device.
For this to work, we need three configurations and you should be able to understand most of it by now.
```
# cat /etc/hostname.em0
up
cat /etc/hostname.iwx0
join MyHomeNetworkSSID wpakey MyHomeWifiPassword
join MyWorkNetworkSSID wpakey MyWorkWifiPassword
up
# cat /etc/hostname.trunk0
trunkproto failover
trunkport em0
trunkport iwx0
inet autoconf
inet6 autoconf
up
```
In this setup, we add the configuration necessary for the device to become operational to the device configuration. All the network configuration moves to the new device trunk0, which we have created.
About the special tunk configurations
```
trunkproto failover
trunkport em0
trunkport iwx0
```
The fist line means that we do a failover. This means we use the fist device if we can. If the first device (master device) is down, then we use the second one.
In this concrete example it means, if a network cable is plugged in to `em0`, we use this device. If the network cable is pulled, we simply continue with the wireless device `iwx0`.

View File

@@ -0,0 +1,61 @@
# OpenBSD sndio and mutiple devices
## Automatic audio device switch
OpenBSD automatically detects the system audio device. But often this is not enough. I want to plug in a USB headset and audio should automatically switch to it.
You can start sndiod with additional `-F` flags to define additional devices, which are switched to when they appear.
```
# sndiod -f rsnd/0 -F rsnd/1 -F rsnd/2 -F rsnd/3
```
You can set these flags permanently with:
```
# rcctl set sndiod flags -f rsnd/0 -F rsnd/1 -F rsnd/2 -F rsnd/3
```
This configuration allows up to 3 additional USB devices to be connected and sndiod will switch to the last one connected.
If you have multiple devices connected and want to switch to a specific one, you can do so with:
```
$ sndioctl server.device=0
$ sndioctl server.device=1
$ sndioctl server.device=2
...
```
## Record from one device, but play back on another...
Let's say I want to connect USB microphone, but I want to to play back sound on another device.
This works by setting the environment variables `AUDIORECDEVICE` and `AUDIOPLAYDEVICE` accordingly.
Example:
```
export AUDIOPLAYDEVICE=snd/0
export AUDIORECDEVICE=snd/1
```
However, sndiod expects every device to play and record. So the above example would work to play on the system, but record on a headset.
If the devices are more limited, the sndio flags need to be more specific, like this:
```
# rcctl set sndiod flags -f rsnd/0 -m play -s play -f rsnd/1 -m rec -s rec
# rcctl restart sndiod
$ export AUDIOPLAYDEVICE=snd/0.play
$ export AUDIORECDEVICE=snd/1.rec
```
This creates a "play" sub device on the first audio device (system audio). And a sub device "rec" on the first USB device. The default is "play,rec", which would not work on my USB microphone. The -m switch describes what the device can do. The -s switch defines the sub device name.
And now... everything works as expected.
```
$ aucat -o test.wav # record from microphone
$ aucat -i test.wav # play on system speaker
```

View File

@@ -1,8 +0,0 @@
<h1>Smoke Ping</h1>
<ul>
<li>The shadow lines (up and down) are showing the spectrum of the response times (latency).</li>
<li>The dot position shows the average response time.</li>
<li>The color of the dot shows the package loss (how many of the 20 requests got lost).</li>
</ul>
<iframe width="100%" height="200%" frameborder=0 src="/smokeping/?target=Network"></iframe>