From 44c6a8300bf4ea0c9c945a4d4f94b31c2e624b70 Mon Sep 17 00:00:00 2001
From: Adar Nimrod <nimrod@shore.co.il>
Date: Sun, 19 Sep 2021 16:26:25 +0300
Subject: [PATCH] Post on installing OpenBSD on the sg-2440.

---
 content/openbsd-on-sg-2440.rst | 210 +++++++++++++++++++++++++++++++++
 1 file changed, 210 insertions(+)
 create mode 100644 content/openbsd-on-sg-2440.rst

diff --git a/content/openbsd-on-sg-2440.rst b/content/openbsd-on-sg-2440.rst
new file mode 100644
index 0000000..53a45fc
--- /dev/null
+++ b/content/openbsd-on-sg-2440.rst
@@ -0,0 +1,210 @@
+Installing OpenBSD on Netgate's SG-2440
+#######################################
+:date: 2021-09-19
+:summary:  Installing OpenBSD on Netgate's SG-2440
+
+This is documentation on how to install OpenBSD (in this case 6.9 but the
+procedure hasn't changed for as long as I can remember). Since the SG-2400 only
+has a serial connection (no monitor output), about half of the is over the
+serial console and the rest is over SSH. This post is for me to help me remember
+what did I do last time.
+
+#. Setting up the serial console
+
+On the laptop:
+
+.. code:: shell
+
+   sudo apt install screen
+   sudo modprobe cp210x
+   dmesg --follow
+
+
+Now connect the cable and watch the :code:`dmesg` output to see the serial
+connection being added (should be at :code:`/dev/ttyUSB0`) and then:
+
+.. code:: shell
+
+   sudo screen /dev/ttyUSB0 115200
+
+
+Insert the USB drive with the installer and reboot (:code:`shutdown -r now`).
+To enable the serial connection in the installer, in the boot prompt run the
+following commands:
+
+
+.. code:: shell
+
+   stty com0 115200
+   set tty com0
+   boot
+
+
+The interactive installer prompts and answers:
+
+.. code:: shell
+
+    Terminal type? [vt220]
+    System hostname? (short form, e.g. 'foo') ns1
+    Available network interfaces are: em0 em1 em2 em3 em4 em5 vlan0.
+    Which network interface do you wish to configure? (or 'done') [em0] em1
+    IPv4 address for em1? (or 'dhcp' or 'none') [dhcp] 192.168.3.1
+    Netmask for em1? [255.255.255.0]
+    IPv6 address for em1? (or 'autoconf' or 'none') [none]
+    Available network interfaces are: em0 em1 em2 em3 em4 em5 vlan0.
+    Which network interface do you wish to configure? (or 'done') [done]
+    Default IPv4 route? (IPv4 address or none)
+    A response is required.
+    Default IPv4 route? (IPv4 address or none) none
+    DNS domain name? (e.g. 'example.com') [my.domain] shore.co.il
+    DNS nameservers? (IP address list or 'none') [none] 9.9.9.9
+
+    Password for root account? (will not echo)
+    Password for root account? (again)
+    The root password must be set.
+    Password for root account? (will not echo)
+    Password for root account? (again)
+    Start sshd(8) by default? [yes]
+    Change the default console to com1? [yes]
+    Available speeds are: 9600 19200 38400 57600 115200.
+    Which speed should com1 use? (or 'done') [115200]
+    Setup a user? (enter a lower-case loginname, or 'no') [no] nimrod
+    Full name for user nimrod? [nimrod] Nimrod Adar
+    Password for user nimrod? (will not echo)
+    Password for user nimrod? (again)
+    WARNING: root is targeted by password guessing attacks, pubkeys are safer.
+    Allow root ssh login? (yes, no, prohibit-password) [no] yes
+
+    Available disks are: sd0 sd1 sd2.
+    Which disk is the root disk? ('?' for details) [sd0] ?
+    sd0: ATA, Micron_M600_MTFD, MU04 naa.500a0751122dae7a (119.2G)
+    sd1: SanDisk, Cruzer Blade, 1.26 serial.07815567071025103004 (3.7G)
+    sd2: Generic, Ultra HS-COMBO, 1.98 serial.04242240000000225001 (28.5G)
+    Available disks are: sd0 sd1 sd2.
+    Which disk is the root disk? ('?' for details) [sd0] sd2
+    Disk: sd2       Usable LBA: 64 to 59768768 [59768832 Sectors]
+       #: type                                 [       start:         size ]
+    ------------------------------------------------------------------------
+       1: EFI Sys                              [          64:          960 ]
+       3: OpenBSD                              [        1024:     59767745 ]
+    Use (W)hole disk MBR, whole disk (G)PT, (O)penBSD area or (E)dit? [OpenBSD] w
+    Setting OpenBSD MBR partition to whole sd2...done.
+    The auto-allocated layout for sd2 is:
+    #                size           offset  fstype [fsize bsize   cpg]
+      a:          1024.0M               64  4.2BSD   2048 16384     1 # /
+      b:          1919.9M          2097216    swap
+      c:         29184.0M                0  unused
+      d:          1591.9M          6029088  4.2BSD   2048 16384     1 # /tmp
+      e:          2471.8M          9289248  4.2BSD   2048 16384     1 # /var
+      f:          3339.8M         14351488  4.2BSD   2048 16384     1 # /usr
+      g:           936.0M         21191488  4.2BSD   2048 16384     1 # /usr/X11R6
+      h:          3783.8M         23108320  4.2BSD   2048 16384     1 # /usr/local
+      i:          1668.0M         30857472  4.2BSD   2048 16384     1 # /usr/src
+      j:          5855.9M         34273472  4.2BSD   2048 16384     1 # /usr/obj
+      k:          6589.5M         46266432  4.2BSD   2048 16384     1 # /home
+    Use (A)uto layout, (E)dit auto layout, or create (C)ustom layout? [a] a
+    /dev/rsd2a: 1024.0MB in 2097152 sectors of 512 bytes
+    6 cylinder groups of 202.50MB, 12960 blocks, 25920 inodes each
+    /dev/rsd2k: 6589.5MB in 13495360 sectors of 512 bytes
+    33 cylinder groups of 202.50MB, 12960 blocks, 25920 inodes each
+    /dev/rsd2d: 1591.9MB in 3260160 sectors of 512 bytes
+    8 cylinder groups of 202.50MB, 12960 blocks, 25920 inodes each
+    /dev/rsd2f: 3339.8MB in 6840000 sectors of 512 bytes
+    17 cylinder groups of 202.50MB, 12960 blocks, 25920 inodes each
+    /dev/rsd2g: 936.0MB in 1916832 sectors of 512 bytes
+    5 cylinder groups of 202.50MB, 12960 blocks, 25920 inodes each
+    /dev/rsd2h: 3783.8MB in 7749152 sectors of 512 bytes
+    19 cylinder groups of 202.50MB, 12960 blocks, 25920 inodes each
+    /dev/rsd2j: 5855.9MB in 11992960 sectors of 512 bytes
+    29 cylinder groups of 202.50MB, 12960 blocks, 25920 inodes each
+    /dev/rsd2i: 1668.0MB in 3416000 sectors of 512 bytes
+    9 cylinder groups of 202.50MB, 12960 blocks, 25920 inodes each
+    /dev/rsd2e: 2471.8MB in 5062240 sectors of 512 bytes
+    13 cylinder groups of 202.50MB, 12960 blocks, 25920 inodes each
+    Available disks are: sd0 sd1.
+    Which disk do you wish to initialize? (or 'done') [done]
+    /dev/sd2a (46c9b63f83d3fd95.a) on /mnt type ffs (rw, asynchronous, local)
+    /dev/sd2k (46c9b63f83d3fd95.k) on /mnt/home type ffs (rw, asynchronous, local, nodev, nosuid)
+    /dev/sd2d (46c9b63f83d3fd95.d) on /mnt/tmp type ffs (rw, asynchronous, local, nodev, nosuid)
+    /dev/sd2f (46c9b63f83d3fd95.f) on /mnt/usr type ffs (rw, asynchronous, local, nodev)
+    /dev/sd2g (46c9b63f83d3fd95.g) on /mnt/usr/X11R6 type ffs (rw, asynchronous, local, nodev)
+    /dev/sd2h (46c9b63f83d3fd95.h) on /mnt/usr/local type ffs (rw, asynchronous, local, nodev)
+    /dev/sd2j (46c9b63f83d3fd95.j) on /mnt/usr/obj type ffs (rw, asynchronous, local, nodev, nosuid)
+    /dev/sd2i (46c9b63f83d3fd95.i) on /mnt/usr/src type ffs (rw, asynchronous, local, nodev, nosuid)
+    /dev/sd2e (46c9b63f83d3fd95.e) on /mnt/var type ffs (rw, asynchronous, local, nodev, nosuid)
+
+    Let's install the sets!
+    Location of sets? (disk http nfs or 'done') [http] disk
+    Is the disk partition already mounted? [yes] no
+    Available disks are: sd0 sd1 sd2.
+    Which disk contains the install media? (or 'done') [sd0] sd1
+      a:          1358848             1024  4.2BSD   2048 16384 16142
+      i:              960               64   MS-DOS
+    Available sd1 partitions are: a i.
+    Which sd1 partition has the install sets? (or 'done') [a]
+    Pathname to the sets? (or 'done') [6.9/amd64]
+
+    Select sets by entering a set name, a file name pattern or 'all'. De-select
+    sets by prepending a '-', e.g.: '-game*'. Selected sets are labelled '[X]'.
+        [X] bsd           [X] base69.tgz    [X] game69.tgz    [X] xfont69.tgz
+        [X] bsd.mp        [X] comp69.tgz    [X] xbase69.tgz   [X] xserv69.tgz
+        [X] bsd.rd        [X] man69.tgz     [X] xshare69.tgz
+    Set name(s)? (or 'abort' or 'done') [done] -x*
+        [X] bsd           [X] base69.tgz    [X] game69.tgz    [ ] xfont69.tgz
+        [X] bsd.mp        [X] comp69.tgz    [ ] xbase69.tgz   [ ] xserv69.tgz
+        [X] bsd.rd        [X] man69.tgz     [ ] xshare69.tgz
+    Set name(s)? (or 'abort' or 'done') [done] -game*
+        [X] bsd           [X] base69.tgz    [ ] game69.tgz    [ ] xfont69.tgz
+        [X] bsd.mp        [X] comp69.tgz    [ ] xbase69.tgz   [ ] xserv69.tgz
+        [X] bsd.rd        [X] man69.tgz     [ ] xshare69.tgz
+    Set name(s)? (or 'abort' or 'done') [done]
+    Directory does not contain SHA256.sig. Continue without verification? [no] yes
+    Installing bsd          100% |**************************| 20423 KB    00:01
+    Installing bsd.mp       100% |**************************| 20515 KB    00:01
+    Installing bsd.rd       100% |**************************|  4107 KB    00:00
+    Installing base69.tgz   100% |**************************|   291 MB    00:54
+    Extracting etc.tgz      100% |**************************|   254 KB    00:00
+    Installing comp69.tgz   100% |**************************| 85958 KB    00:26
+    Installing man69.tgz    100% |**************************|  7560 KB    00:06
+    Location of sets? (disk http nfs or 'done') [done]
+
+    What timezone are you in? ('?' for list) [Canada/Mountain] Israel
+    Saving configuration files... done.
+    Making all device nodes... done.
+    Multiprocessor machine; using bsd.mp instead of bsd.
+    Exit to (S)hell, (H)alt or (R)eboot? [reboot]
+
+
+With this part done, I should be able to login as the root account over SSH (or
+over the serial console). Now I should bootstrap the instance in the following
+ways: setting up :code:`doas` for the regular user, setting up the internet
+connection and adding the SSH public keys for the regular user. Then I can run
+Ansible and setup everything else.
+
+For the internet connection, I don't have any nice way of doing it, so I just
+copy the connection details from the :code:`router` role in the :code:`homelab`
+repository (get the password from the Keepass password database with :code:`ph
+show --field Password 'Web Sites/Bezeq International'`).
+
+Add the public SSH keys:
+
+.. code:: shell
+
+   ssh 192.168.3.1 'mkdir -p .ssh; chmod 700 .ssh; touch .ssh/authorized_keys; chmod 600 .ssh/authorized_keys'
+   { ssh-keygen -yf ~/.ssh/shore_ecdsa; ssh-keygen -yf ~/.ssh/shore_ed25519; } | ssh 192.168.3.1 'tee .ssh/authorized_keys'
+
+Bootstrap the instance (in the :code:`homelab` repository):
+
+.. code:: shell
+
+   ansible-playbook bootstrap.yaml -l ns1 -u root -k -e 'ansible_host=192.168.3.1'
+
+Setup the router (still in the :code:`homelab` repository):
+
+.. code:: shell
+
+   ansible-playbook router.yaml -e 'ansible_host-192.168.3.1'
+   ansible-playbook update.yaml -l ns1
+
+
+Boom! Done.
-- 
GitLab