diff --git a/.gitignore b/.gitignore index e1716b0..c900b34 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -release +./release-* .vagrant Vagrantfile ssh-config diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..2ae2f2f --- /dev/null +++ b/LICENSE @@ -0,0 +1,13 @@ +Copyright (c) 2023 Samuel 'sk4nz' AUBERTIN sk4nz@sk4.nz + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/src/release/Makefile b/src/release/Makefile new file mode 100644 index 0000000..ac00802 --- /dev/null +++ b/src/release/Makefile @@ -0,0 +1,62 @@ +TAG?= master +BUILD_TARGET?= GENERIC +RELEASE_FILES= *.EFI BUILDINFO INSTALL.* *.tgz bsd* *.iso cdboot *.img pxeboot + +include build.mk + +.SILENT: +.PHONY: RELEASE KERNEL BASE + +all: + echo +++ Starting BUILD_CONF=$(BUILD_CONF) TAG=$(TAG) + exec $(MAKE) RELEASE + +KERNEL: dl-sources + echo - Updating git index + git config --global --add safe.directory /usr/src + git config --global --add safe.directory /usr/xenocara + cd /usr/src; git update-index --really-refresh + cd /usr/xenocara; git update-index --really-refresh + echo - Checkout branch $(TAG) + cd /usr/src; git checkout -q --no-progress $(TAG) || git checkout -q --no-progress master + cd /usr/xenocara; git checkout -q --no-progress $(TAG) || git checkout -q --no-progress master + exec $(MAKE) do-kernel + +RELEASE: BASE KERNEL $(RELEASE_PATH)/install$(OPENBSD_SYS_VERSION).iso $(RELEASE_PATH)/site$(OPENBSD_SYS_VERSION).tgz + echo - Signing Release + cd $(RELEASE_PATH); \ + cksum -a sha256 $(RELEASE_FILES) | sort > $(RELEASE_PATH)/SHA256 + [ -e "$(SIGNIFY_PRIVKEY)" ] \ + && signify -S -s $(SIGNIFY_PRIVKEY) -e -m $(RELEASE_PATH)/SHA256 -x $(RELEASE_PATH)/SHA256.sig \ + || echo $(SIGNIFY_PRIVKEY) missing in the $(TAG) branch, skipping. + -cd $(RELEASE_PATH) && ls -nT > index.txt && cat BUILDINFO index.txt + +BASE: KERNEL dl-sources + umask 007; exec $(MAKE) do-base + +$(RELEASE_PATH)/base$(OPENBSD_SYS_VERSION).tgz: + exec $(MAKE) do-release + +$(XRELEASE_PATH)/xbase$(OPENBSD_SYS_VERSION).tgz: + exec $(MAKE) do-x + +$(RELEASE_PATH)/install$(OPENBSD_SYS_VERSION).iso: $(RELEASE_PATH)/base$(OPENBSD_SYS_VERSION).tgz $(XRELEASE_PATH)/xbase$(OPENBSD_SYS_VERSION).tgz + exec $(MAKE) do-iso + +$(RELEASE_PATH)/site$(OPENBSD_SYS_VERSION).tgz: + echo - Creating site$(OPENBSD_SYS_VERSION).tgz + mkdir -p $(SITE_PATH) + printf 'echo install.site\ + \nsysctl kern.version > /root/kernel\ + printf '\#!/bin/ksh\ + sed -iorig -e "s/ffs rw,/ffs rw,softdep,/" /etc/fstab\ + \n'swap /tmp mfs rw,nodev,nosuid,-s=64m 0 0' >> /etc/fstab\ + \n'rcctl set ntpd flags -s\ + \necho "kern.timecounter.hardware=tsc" >> /etc/sysctl.conf\ + \nrcctl disable sndiod\ + \necho 'kern.allowdt=1' >> /etc/sysctl.conf\ + \nsysctl kern.allowdt=1\ + \necho "http://cdn.openbsd.org/pub/OpenBSD" > /etc/installurl\n'\ + > $(SITE_PATH)/install.site + cd $(SITE_PATH) && tar -zcf $(RELEASE_PATH)/site$(OPENBSD_SYS_VERSION).tgz install.site + cd $(RELEASE_PATH) && grep site$(OPENBSD_SYS_VERSION) SHA256 || sha256 site$(OPENBSD_SYS_VERSION).tgz >> SHA256 diff --git a/src/release/build.mk b/src/release/build.mk new file mode 100644 index 0000000..d1e4cef --- /dev/null +++ b/src/release/build.mk @@ -0,0 +1,163 @@ +#TODO : refactor so there is no phony targets anymore + +TAG?= master +BUILD_TARGET?= GENERIC +BUILD_PATH= /home/build +BUILD_CONF?= $(BUILD_TARGET).MP +BUILD_LOG?= /var/log/$(TAG)_build.log +DEST_PATH_BASE= /dest +DEST_PATH?= $(DEST_PATH_BASE)/$(TAG) +XDEST_PATH?= $(DEST_PATH_BASE)/X$(TAG) +#WWW_PATH= /var/www/htdocs +#WWW_RELEASE_PATH?= $(WWW_PATH)/$(TAG) +RELEASE_PATH?= $(BUILD_PATH)/$(TAG) +XRELEASE_PATH?= $(BUILD_PATH)/$(TAG) +MKOPTIONS= -j$$((sysctl -n hw.ncpuonline 2> /dev/null && sysctl -n hw.ncpufound 2> /dev/null && sysctl -n hw.ncpu 2> /dev/null) | head -n 1) +SITE_PATH?= $(BUILD_PATH)/site_$(BUILD_TARGET) + +SIGNIFY_PRIVKEY= /usr/src/etc/signify/openbsd-$(OPENBSD_SYS_VERSION)-base.sec + +MFS_SIZE=8192M +MFS_OBJ=/usr/obj +MFS_XOBJ=/usr/xobj + +LOGS= >> $(BUILD_LOG) 2>> $(BUILD_LOG).error + +.PHONY: do-kernel do-x do-base do-release do-iso dl-sources + +do-x: + echo + Building XRELEASE - $$(date +"%Y-%m-%dT%H:%M:%S%z") + -mkdir -p $(MFS_XOBJ) && \ + mount -t mfs -o rw,noatime,-s=$(MFS_SIZE) swap $(MFS_XOBJ) && \ + echo MFS $(MFS_XOBJ) && \ + chown build:wobj $(MFS_XOBJ) && chmod 770 $(MFS_XOBJ) + echo - Boostraping Xenocara && \ + cd /usr/xenocara && make bootstrap >> $(BUILD_LOG) + echo - Preparing Xenocara objects && \ + cd /usr/xenocara && make obj $(LOGS) + echo - Compiling Xenocara && \ + cd /usr/xenocara && make $(MKOPTIONS) build $(LOGS) + mkdir -p $(XDEST_PATH) $(XRELEASE_PATH) + echo - Building Xenocara release && \ + export DESTDIR=$(XDEST_PATH) RELEASEDIR=$(XRELEASE_PATH); \ + cd /usr/xenocara && \ + make release $(LOGS) && \ + make checkdist >> $(BUILD_LOG); \ + unset RELEASEDIR DESTDIR + echo + XRELEASE built - $$(date +"%Y-%m-%dT%H:%M:%S%z") + +do-iso: + echo + Building ISO - $$(date +"%Y-%m-%dT%H:%M:%S%z") + -export RELDIR=$(RELEASE_PATH) RELXDIR=$(XRELEASE_PATH); \ + cd /usr/src/distrib/$(MACHINE)/iso && \ + make $(MKOPTIONS) $(LOGS) && \ + make install $(LOGS); \ + unset RELDIR RELXDIR + echo + ISO built - $$(date +"%Y-%m-%dT%H:%M:%S%z") + +do-release: + echo + Building RELEASE - $$(date +"%Y-%m-%dT%H:%M:%S%z") + mkdir -p $(DEST_PATH) && chown -R build:wsrc $(DEST_PATH_BASE) && chmod -R 700 $(DEST_PATH_BASE) + #mkdir -p $(WWW_RELEASE_PATH) && chown build:daemon $(WWW_RELEASE_PATH) + #stat $(RELEASE_PATH) > /dev/null 2>&1 || (ln -s $(WWW_RELEASE_PATH)/ $(RELEASE_PATH) && chown build $(RELEASE_PATH)) + mkdir -p $(RELEASE_PATH) && chown build $(RELEASE_PATH) + #@grep minimagma /etc/disktab 2>&1 > /dev/null | echo -e '\nminimagma:dt=rdroot:se#512:nt#1:ns#128:nc#150:pa#19136:oa#64:ba#17492:fa#1024:ta=4.2BSD:pc#19200:oc#0:' >> /etc/disktab + #@grep rdrootc /etc/disktab 2>&1 > /dev/null | echo -e '\nrdrootc|ramdiskroot|RAM-disk root FS image:dt=rdroot:se#512:nt#2:ns#330:nc#16:pa#10560:oa#0:ta=4.2BSD:ba#4096:fa#512:pb#0:ob#0:tb=swap:pc#10560:oc#0:\n' >> /etc/disktab + echo - Compiling $(BUILD_CONF) release \ + && export DESTDIR=$(DEST_PATH) RELEASEDIR=$(RELEASE_PATH) \ + && cd /usr/src/etc \ + && make $(MKOPTIONS) release $(LOGS) + echo - Creating $(BUILD_CONF) distribution sets \ + && cd /usr/src/distrib/sets \ + && make $(LOGS) + echo - Checking files \ + && export DESTDIR=$(DEST_PATH) RELEASEDIR=$(RELEASE_PATH) \ + && cd /usr/src/distrib/sets \ + && sh checkflist $(LOGS) || true + echo + RELEASE built - $$(date +"%Y-%m-%dT%H:%M:%S%z") + +do-base: + echo + Building BASE - $$(date +"%Y-%m-%dT%H:%M:%S%z") +.ifdef GLOBAL_AUTOCONF_CACHE + install -c -o build -g wobj -m 664 /dev/null \ + $(GLOBAL_AUTOCONF_CACHE) +.endif + if [[ `id -u` -ne 0 ]]; then \ + echo $@ must be called by root >&2; \ + false; \ + fi + -mkdir -p $(MFS_OBJ) && \ + mount -t mfs -o rw,noatime,-s=$(MFS_SIZE) swap $(MFS_OBJ) && \ + chown build:wobj $(MFS_OBJ) && chmod 770 $(MFS_OBJ) + cd /usr/src; make obj $(LOGS) + cd /usr/src/share/mk && \ + exec $(MAKE) $(MKOPTIONS) install $(LOGS) + #cd /usr/src && \ + exec $(MAKE) $(MKOPTIONS) cleandir $(LOGS) + echo - Building /usr/src/include && \ + cd /usr/src && \ + exec $(MAKE) $(MKOPTIONS) includes $(LOGS) + echo - Building /usr/src/lib && \ + cd /usr/src/lib && \ + su build -c 'exec $(MAKE) $(MKOPTIONS)' $(LOGS) \ + && NOMAN=1 exec $(MAKE) $(MKOPTIONS) install $(LOGS) + echo - Building /usr/src/gnu/lib && \ + cd /usr/src/gnu/lib && \ + su build -c 'exec $(MAKE) $(MKOPTIONS)' $(LOGS) \ + && NOMAN=1 exec $(MAKE) $(MKOPTIONS) install $(LOGS) + /sbin/ldconfig -R + echo - Building /usr/src && \ + cd /usr/src && \ + su build -c 'exec $(MAKE) $(MKOPTIONS)' $(LOGS) && \ + exec $(MAKE) $(MKOPTIONS) install $(LOGS) + echo - Building distribution sets && \ + cd /usr/src && \ + /bin/sh /usr/src/distrib/sets/makeetcset \ + /usr/src $(MAKE) $(MKOPTIONS) $(LOGS) + echo + BASE built - $$(date +"%Y-%m-%dT%H:%M:%S%z") + +/usr/xenocara: + echo - Cloning xenocara + cd /usr/; git clone https://github.com/openbsd/xenocara $@ >> $(BUILD_LOG) 2>&1 + chown -R build:wsrc $@ + +/usr/src/Makefile: + echo - Cloning sources + git clone https://github.com/openbsd/src /usr/src >> $(BUILD_LOG) 2>&1 + +/usr/ports: + echo - Cloning ports + cd /usr/; git clone https://github.com/openbsd/ports $@ >> $(BUILD_LOG) 2>&1 + chown -R build:wsrc $@ + +/etc/mk.conf: + printf 'PIPE=\t-pipe\ + \nGLOBAL_AUTOCONF_CACHE=\t/dest/autoconf_cache\ + \nNOPROFILE=\tyes\ + \nUSE_CCACHE=\tyes\ + \nCCACHE_ENV="CCACHE_PREFIX=/usr/local/bin/distccwrapper CCACHE_MAXSIZE=10G CCACHE_DIR=$(DEST_PATH_BASE)/ccache"\ + \nSKIPDIR+=\tregress\ + \n#SKIPDIR+=\tgames\n' > $@ + +dl-sources: /usr/src/Makefile /etc/mk.conf /usr/xenocara $(DEST_PATH_BASE)/ccache + echo - Source downloaded + chown -R build:wsrc /usr/src + +$(DEST_PATH_BASE)/ccache: + mkdir -p $(DEST_PATH_BASE)/ccache + chown -R build:wsrc $(DEST_PATH_BASE)/ccache + +do-kernel: /usr/src/sys/arch/$(MACHINE)/conf/$(BUILD_CONF) + echo + Building $(BUILD_CONF) KERNEL - $$(date +"%Y-%m-%dT%H:%M:%S%z") + #cd /usr/src/sys/arch/$(MACHINE); make clean >> $(BUILD_LOG) + cd /usr/src/sys/arch/$(MACHINE)/conf ; config $(BUILD_CONF) >> $(BUILD_LOG) + -@cd /usr/src/sys/arch/$(MACHINE)/compile/$(BUILD_CONF); make obj >> $(BUILD_LOG) + cd /usr/src/sys/arch/$(MACHINE)/compile/$(BUILD_CONF); make config >> $(BUILD_LOG) + echo - Compiling $(BUILD_CONF) kernel && \ + cd /usr/src/sys/arch/$(MACHINE)/compile/$(BUILD_CONF); \ + make $(MKOPTIONS) $(LOGS) + #echo - Installing $(BUILD_CONF) kernel && \ + cd /usr/src/sys/arch/$(MACHINE)/compile/$(BUILD_CONF); \ + make $(MKOPTIONS) install $(LOGS) + echo + $(BUILD_CONF) KERNEL built - $$(date +"%Y-%m-%dT%H:%M:%S%z") +