====== HyperbolaBSD Development Guidelines ====== This article is still in progress and is expected to be finished soon. ===== Preparations for development-environment ===== Before going forward a generic setup with a valid installation for **OpenBSD 7.0** is needed as HyperbolaBSD is also in need for testing-environment. We recommend to use an official mirror offering that version like [[https://mirrors.dotsrc.org/pub/OpenBSD/|mirrors.dotsrc.org]]. You can find the needed data and ISO-file [[https://mirrors.dotsrc.org/pub/OpenBSD/7.0/amd64/|here]]. As Richard Stallman said in [[https://www.gnu.org/philosophy/is-ever-good-use-nonfree-program.html#f2|the second footnote of his article "Is It Ever a Good Thing to Use a Nonfree Program?"]], **it is legitimate to recommend running some nonfree software momentarily in order to remove it**. Therefore, **Hyperbola Project clarifies here** which is recommending the OpenBSD installation in a virtual machine in order to replace it with HyperbolaBSD. Once the official HyperbolaBSD live image be ready, this part of the documentation will be removed. Please note that **AMD64 (x86_64)** is mandatory needed for the moment. You should setup your preferred way for virtualization, either with [[https://www.hyperbola.info/packages/?q=qemu|qemu]] or [[en:manual:virtual_machine_manager|qtemu]]. ===== HyperbolaBSD/OpenBSD mount point suggestions ===== Notes: * **BSD partitions/slices** start with **"a"** as root, **"b"** as swap and **"c"** as entire device.\\ * **MBR** and **GUID** partition start with **"i"** as primary partition.\\ * Unpartition storages always use** "c"**. Mount the root **FFS2** as secondary device: # mkdir hbbsd_dir/ # mount /dev/sd1a hbbsd_dir/ Mount a primary **EXT2** as third device: # mkdir ext2_dir/ # mount /dev/sd2i ext2_dir/ ===== Getting the source code and building the kernel (HyperBK) ===== The following requirements are needed: * **GCC** and **Binutils** in cross compiling \\ as **arch-machine-hyperbolabsd** triplet \\ **(example: x86_64-unknown-hyperbolabsd)** * **BSD make** and **Athena Jot**. The next preparation steps are: * Install **GCC** and **Binutils** for HyperbolaBSD cross compilation. $ TARCH=x86_64-unknown-hyperbolabsd $ doas pacman -S $TARCH-gcc $TARCH-binutils * Install **BSD make** and **Athena Jot**. $ doas pacman -S bmake athena-jot * Clone this repository as name **sys**: $ git clone https://git.hyperbola.info:50100/hyperbolabsd/hyperbk.git * Access the directory **hyperbk/arch/amd64/compile/GENERIC.MP**: $ KARCH=amd64 KCFG=GENERIC.MP $ cd hyperbk/arch/$KARCH/compile/$KCFG; unset KARCH KCFG * Copy the directory **obj_gen** to **obj**: $ cp -va obj_gen obj * Access the **obj** directory: $ cd obj * Make the //HyperbolaBSD// kernel //("bmake install" to install this kernel)//: $ NTHREADS=2 $ bmake -j $NTHREADS CC=$TARCH-cc LD=$TARCH-ld $ unset CC LD NTHREADS TARCH Steps to clean source code: $ KARCH=amd64 KCFG=GENERIC.MP $ cd hyperbk/arch/$KARCH/compile/$KCFG; unset KARCH KCFG $ bmake clean For more information see: * **https://man.openbsd.org/release** \\ //(Build and install a new kernel)// * **https://man.openbsd.org/config** \\ //(BSD kernel configuration)// ===== Getting the source code and building the user space (alpha) ===== The following requirements are needed: * **GCC** and **Binutils** in cross compiling \\ as **arch-machine-hyperbolabsd** triplet \\ **(example: x86_64-unknown-hyperbolabsd)** * **BSD make**, **rpcsvc-proto**, **Sharutils** and **Universal Ctags**. * **OpenBSD lorder** (use **usr.bin/lorder/lorder.sh**), \\ due the BSD lorder from **bsdmainutils** is works different. The next preparation steps are: * Install **GCC** and **Binutils** for HyperbolaBSD cross compilation. $ TARCH=x86_64-unknown-hyperbolabsd $ doas pacman -S $TARCH-gcc $TARCH-binutils * Install **BSD make**, **rpcsvc-proto**, **Sharutils** and **Universal Ctags**. $ doas pacman -S bmake rpcsvc-proto sharutils ctags * Clone this repository: $ URL=https://git.hyperbola.info:50100 $ git clone $URL/hyperbolabsd/userspace-alpha.git $ unset URL * Install **OpenBSD lorder**. $ cd userspace-alpha $ doas cp usr.bin/lorder/lorder.sh /usr/local/bin/lorder $ doas chown 0:0 /usr/local/bin/lorder $ doas chmod 0755 /usr/local/bin/lorder * Prepare the **HyperBK™** source code: $ ./sys.sh * Generate **obj** directories: $ bmake -f obj.mk * Make the //HyperbolaBSD// kernel //("bmake install" to install this kernel)//: $ NTHREADS=2 $ bmake -m $PWD/share/mk -j $NTHREADS CC=$TARCH-cc LD=$TARCH-ld $ unset CC LD NTHREADS TARCH Steps to clean source code: $ cd userspace-alpha $ bmake -m $PWD/share/mk clean $ bmake -f obj.mk clean Notes: * Works with **AMD64 (x86_64)** only. * Some programs does not compile: * **sbin/unwind** * **usr.bin/make** * **usr.bin/nm** * **usr.bin/unifdef** * **usr.bin/vi** * **usr.sbin/nsd** * **usr.sbin/pkg_add** * **usr.sbin/switchd** * **usr.sbin/unbound** * **gnu** * **games** ===== Installing OpenBSD virtual machine ===== https://man.openbsd.org/disklabel $ qemu-img create obsd.img 2.2G $ qemu-system-x86_64 -machine q35 -cpu max -smp 2 -m 4G -device intel-hda -device hda-duplex -name OpenBSD -net nic -net user,id=port1,hostfwd=tcp::2022-:22 -s -hda install70.img -hdb obsd.img -netdev user,id=mynet0,hostfwd=tcp:127.0.0.1:7922-:22 -device virtio-net,netdev=mynet0 (I)nstall, (U)pgrade, (A)utoinstall or (S)hell? i Choose your keyboard layout ('?' or 'L' for list) [default] System hostname? (short form, e.g. 'foo') openbsd Which network interface do you wish to configure? (or 'done') [em0] IPv4 address for em0? (or 'autoconf' or 'none') [autoconf] IPv6 address for em0? (or 'autoconf' or 'none') [none] Which network interface do you wish to configure? (or 'done') [done] DNS nameservers? (IP address list or 'none') [none] Password for root account? (will not echo) openbsd Password for root account? (again) openbsd Start sshd(8) by default? [yes] Do you expect to run the X Window System? [yes] Do you want the X Window System to be started by xenodm(1)? [no] Change the default console to com0? [no] Setup a user? (enter a lower-case loginname, or 'no') [no] openbsd Full name for user openbsd? [openbsd] OpenBSD Password for user openbsd? (will not echo) openbsd Password for user openbsd? (again) openbsd Allow root ssh login? (yes, no, prohibit-password) [no] Which disk is the root disk? ('?' for details) [sd0] sd1 Use (W)hole disk MBR, whole disk (G)PT or (E)dit? [whole] Use (A)uto layout, (E)dit auto layout, or create (C)ustom layout? [a] Which disk do you wish to initialize? (or 'done') [done] Location of sets? (cd0 disk http nfs or 'done') [cd0] disk Is the disk partition already mounted? [yes] no Which disk contains the install media? (or 'done') [sd0] Which sd0 partition has the install sets? (or 'done') [a] Pathname to the sets? (or 'done') [7.0/amd64] Set name(s)? (or 'abort' or 'done') [done] Directory does not contain SHA256.sig. Continue without verification? [no] yes Location of sets? (cd0 disk http nfs or 'done') [done] What timezone are you in? ('?' for list) [Canada/Montain] Etc/UTC Exit to (S)hell, (H)alt or (R)eboot? [reboot] h ===== Creating image storage with EXT2 file system ===== $ qemu-img create ext2.img 5G $ qemu-system-x86_64 -machine q35 -cpu max -smp 2 -m 4G -device intel-hda -device hda-duplex -name OpenBSD -net nic -net user,id=port1,hostfwd=tcp::2022-:22 -s -hda obsd.img -hdb ext2.img -netdev user,id=mynet0,hostfwd=tcp:127.0.0.1:7922-:22 -device virtio-net,netdev=mynet0 # newfs_ext2fs -IO 1 sd1c # halt -p ===== Building a modified OpenBSD bootloader to support HyperbolaBSD kernel ===== https://man.openbsd.org/release \\ https://www.openbsd.org/anoncvs.html $ qemu-system-x86_64 -machine q35 -cpu max -smp 2 -m 4G -device intel-hda -device hda-duplex -name OpenBSD -net nic -net user,id=port1,hostfwd=tcp::2022-:22 -s -hda obsd.img -hdb ext2.img -netdev user,id=mynet0,hostfwd=tcp:127.0.0.1:7922-:22 -device virtio-net,netdev=mynet0 $ cd /usr $ cvs -qd anoncvs@anoncvs.ca.openbsd.org:/cvs checkout -rOPENBSD_7_0 -P src $ cvs -d anoncvs@anoncvs.spacehopper.org:/cvs checkout -P src Are you sure you want to continue connecting (yes/no)? yes nano /usr/src/sys/sys/disklabel.h: --- -#define DOSPTYP_OPENBSD 0xa6 /* OpenBSD partition type */ +#define DOSPTYP_OPENBSD 0x6a /* HyperbolaBSD partition type */ # cd /usr/src/sys/arch/amd64/compile/GENERIC.MP # make obj # make config # make # mount -t ext2fs /dev/sd1c /mnt # cd /usr/obj/?? # cp -va biosboot boot /mnt # umount /mnt # halt -p ===== Adapting a duplicated OpenBSD virtual machine ===== * Duplicate the //OpenBSD virtual machine// image //obsd.img//: $ cp obsd.img hbbsd.img * Run virtual machine with two images **obsd.img** and **hbbsd.img**. * Install the modified //OpenBSD bootlader// (//boot// and //biosboot//) in **hbbsd.img**. * Move all //OpenBSD user space// into a **/OPENBSD/** directory in **hbbsd.img**. * Remove OpenBSD kernels in **hbbsd.img**. * Change the A6 to 6A partition type in **hbbsd.img**. ===== Extracting the OpenBSD user space ===== ===== Creating the HyperbolaBSD user space package ===== Create the HyperbolaBSD userspace, with same as locations, owners, groups and permissions from OpenBSD userspace. # cd hbsd_base/var/sysmerge/etc_dir/ # bsdtar cvozf ../etc.tgz --options gzip:compression-level=9 * # cd .. # rm -r etc_dir # cd hbsd_base/ # bsdtar cvzf ../hbbsd_base.tgz * ===== Adding HyperbolaBSD packages in install70.img ===== $ qemu-system-x86_64 -machine q35 -cpu max -smp 2 -m 4G -device intel-hda -device hda-duplex -name OpenBSD -net nic -net user,id=port1,hostfwd=tcp::2022-:22 -s -hda obsd.img -hdb install70.img -hdc ext2.img -netdev user,id=mynet0,hostfwd=tcp:127.0.0.1:7922-:22 -device virtio-net,netdev=mynet0 # mkdir ext2_dir # mount /dev/sd1a /mnt # mount -t ext2fs /dev/sd2c ext2_dir # mkdir /mnt/hbbsd # cp -va /mnt/7.0/amd64/INSTALL.amd64 /mnt/hbbsd # cd ext2_dir # cp -va bsd bsd.mp bsd.rd /mnt/hbbsd # cp -va hbbsd_base.tgz /mnt/hbbsd/base70.tgz # cd /mnt/hbbsd # sha256 * > SHA256 # chmod 0644 * # chmod 0755 bsd bsd.mp # chown build:2000 * # chown 0 INSTALL.amd64 bsd.rd # chown 0:wheel SHA256 # cd # umount /mnt # umount ext2_dir # rmdir ext2_dir # halt -p ===== Installing HyperbolaBSD virtual machine ===== $ qemu-img create hbbsd_inst.img 2.2G $ qemu-system-x86_64 -machine q35 -cpu max -smp 2 -m 4G -device intel-hda -device hda-duplex -name HyperbolaBSD -net nic -net user,id=port1,hostfwd=tcp::2022-:22 -s -hda install70.img -hdb hbbsd_inst.img -netdev user,id=mynet0,hostfwd=tcp:127.0.0.1:7922-:22 -device virtio-net,netdev=mynet0 (I)nstall, (U)pgrade, (A)utoinstall or (S)hell? i Choose your keyboard layout ('?' or 'L' for list) [default] System hostname? (short form, e.g. 'foo') hyperbolabsd Which network interface do you wish to configure? (or 'done') [em0] IPv4 address for em0? (or 'autoconf' or 'none') [autoconf] IPv6 address for em0? (or 'autoconf' or 'none') [none] Which network interface do you wish to configure? (or 'done') [done] DNS nameservers? (IP address list or 'none') [none] Password for root account? (will not echo) hyperbolabsd Password for root account? (again) hyperbolabsd Start sshd(8) by default? [yes] Do you expect to run the X Window System? [yes] Do you want the X Window System to be started by xenodm(1)? [no] Change the default console to com0? [no] Setup a user? (enter a lower-case loginname, or 'no') [no] hyperbolabsd Full name for user hyperbolabsd? [hyperbolabsd] HyperbolaBSD Password for user hyperbolabsd? (will not echo) hyperbolabsd Password for user hyperbolabsd? (again) hyperbolabsd Allow root ssh login? (yes, no, prohibit-password) [no] Which disk is the root disk? ('?' for details) [sd0] sd1 Use (W)hole disk MBR, whole disk (G)PT or (E)dit? [whole] Use (A)uto layout, (E)dit auto layout, or create (C)ustom layout? [a] Which disk do you wish to initialize? (or 'done') [done] Location of sets? (cd0 disk http nfs or 'done') [cd0] disk Is the disk partition already mounted? [yes] no Which disk contains the install media? (or 'done') [sd0] Which sd0 partition has the install sets? (or 'done') [a] Pathname to the sets? (or 'done') [7.0/amd64] hbbsd Set name(s)? (or 'abort' or 'done') [done] Directory does not contain SHA256.sig. Continue without verification? [no] yes Location of sets? (cd0 disk http nfs or 'done') [done] What timezone are you in? ('?' for list) [Canada/Montain] Etc/UTC # halt -p $ qemu-system-x86_64 -machine q35 -cpu max -smp 2 -m 4G -device intel-hda -device hda-duplex -name HyperbolaBSD -net nic -net user,id=port1,hostfwd=tcp::2022-:22 -s -hda obsd.img -hdb hbbsd.img -hdc hbbsd_inst.img -netdev user,id=mynet0,hostfwd=tcp:127.0.0.1:7922-:22 -device virtio-net,netdev=mynet0 # mkdir hbbsd_dir # mount /dev/sd1a hbbsd_dir # mount /dev/sd2a /mnt # cd /mnt # cp -va altroot bin bsd bsd.mp bsd.rd dev etc home mnt root sbin tmp usr var hbbsd_dir # umount hbbsd_dir # umount /mnt # rmdir hbbsd_dir # halt -p