Git Product home page Git Product logo

arm64-gate's Introduction

illumos for AArch64 bootstrap

This tree is the bootstrap for illumos on AArch64. It contains sufficient pieces, and build materials, to build a bootable disk that can be used for development of the AArch64 port.

Dependencies

  • An illumos system
  • A compilation environment, headers, compiler, etc. (You will need both GCC 7, GCC 10, and their dependencies and build dependencies to include at least GMP, MPC, and MPFR):
    # Run this in OmniOS:
    sudo pkg install \
      pkg:/developer/gcc7 \
      pkg:/developer/gcc10 \
      pkg:/developer/pkg-config \
      pkg:/ooce/library/gnutls \
      pkg:/ooce/text/texinfo
    
    # Run this in OpenIndiana:
    sudo pkg install \
      pkg:/developer/gcc-7 \
      pkg:/developer/gcc-10 \
      pkg:/developer/build/pkg-config \
      pkg:/library/gnutls-3 \
      pkg:/text/texinfo
    
    # For OpenIndiana, this may be necessary before installing OpenSSL:
    sudo pkg set-mediator -V 1.1 openssl
    
    # Run this in OmniOS or OpenIndiana:
    sudo pkg install \
      pkg:/developer/astdev \
      pkg:/developer/illumos-closed \
      pkg:/developer/swig \
      pkg:/developer/build/gnu-make \
      pkg:/developer/build/onbld \
      pkg:/developer/java/openjdk8 \
      pkg:/developer/parser/bison \
      pkg:/file/gnu-coreutils \
      pkg:/library/mpc \
      pkg:/library/perl-5/xml-parser \
      pkg:/library/security/openssl-11 \
      pkg:/media/cdrtools \
      pkg:/network/rsync \
      pkg:/security/sudo \
      pkg:/shell/pipe-viewer \
      pkg:/system/zones/internal

Building

To build there are three-ish steps

  1. make download -- Fetch all the other sources we need at their correct versions. (By default this takes shallow-ish clones of big trees, feel free to replace them with full clones).
  2. make setup -- Build all the prerequisites to building illumos
  3. make illumos -- Build illumos The environment file is in env/aarch64 in this directory, and is what gets used for bootstrapping.
  4. make disk -- Build the disk image which you can give to qemu(1) This will also ask for your password, so if you just run make disk and let dependencies take over, that won't go great.

Note that make sysroot and make download-omnios may be run multiple times as you work to keep those pieces up-to-date, the latter is especially useful as that goes into the disk image we create.

Booting

Take the illumos-disk.img you have built, and the inetboot.bin for your platform (likely qemu) out of the proto area, and supply them to qemu

I use something like this:

sudo qemu-system-aarch64 -nographic -machine virt-4.1 -m 2g -smp 2 -cpu cortex-a53 -kernel inetboot.bin -append "-D /virtio_mmio@a003c00" -netdev vnic,ifname=braich0,id=net0 -device virtio-net-device,netdev=net0,mac=52:54:00:70:0a:e4 -device virtio-blk-device,drive=hd0 -drive file=$PWD/illumos-disk.img,format=raw,id=hd0,if=none
  • -nographic -- serial console on stdout
  • -machine virt-4.1 -- the current target qemu machine
  • -m 2g -- 2G of memory, more can never hurt
  • -smp 2 -- 2 CPUs, again, more shouldn't hurt
  • -cpu cortex-a53 -- an appropriate CPU for the port
  • -kernel inetboot.bin -- the inetboot.bin for qemu taken from the illumos build
  • -append "-D /virtio_mmio@a003c00" -- tell inetboot where to boot from
  • -netdev vnic,ifname=braich0,id=net0 -- vnic networking
  • -device virtio-net-device,netdev=net0,mac=52:54:00:70:0a:e4 -- virtual NIC, vioif0 in the system. The MAC must match your vnic.
  • -device virtio-blk-device,drive=hd0 -- our disk
  • -drive file=illumos-disk.img,format=raw,id=hd0,if=none -- the illumos disk image you want to boot.

A convenient way to do this is just to take the entire qemu-setup/ directory. Note that the default configuration we use is trying to strike a balance between running on smaller systems and booting in an even vaguely tolerable amount of time. It is a balance we have not yet reached.

Note: the networking configuration here is important, you need to have a networking device for the device tree to be what we expect right now. The configuration above and in run.sh is for qemu on illumos using vnic networking, using a vnic braich0. If this is inappropriate for you, you need to provide an alternative, in the worst case user networking -netdev user,id=net0.

You will see messages from the temporary booter that seem worrying, about missing boot_archives and vdev_probe, these are, weirdly, specific to the currently weird booting method.

Once you have booted you will see copious boot messages both to aid debugging and because the emulation is slow and it helps to keep track that something is still happening, these are hardwired in the source at present, absent a real booter.

There are also lingering bugs around SMF that may or may not fail during boot. The two most notable are that, after messages indicating your CPU(s) are online, things will pause without output while svvcfg apply happens. The other is that svc:/system/rbac, svc:/network/inetd-upgrade, and svc:/system/update-man-index almost always time out, and often take a long time to do so, be patient. The first of these has dependencies, and so stall a lot of our boot process.

After you boot

root has no password (at all, rather than an empty password).

Find something to fix! Lots of things are missing are broken! Many of them important!

The most notable things for fixing stuff are that we have at present no mdb(1) or kmdb(1) or dtrace(8), which is unfortunate.

We build a cross gdb(1) to tide us over, which can be used to analyze core dumps from the virtual machine (you can just mount your pool back onto a development machine, etc), or to analyze the running kernel code directly (connect to the gdb server).

(gdb) target remote tcp::1234

There is a .gdbinit in this directory which does useful things like load the inetboot and unix for qemu and provide a load-kernel-modules command to load the other modules currently present in the running kernel. It is not great, but it is something.

See Also

arm64-gate's People

Contributors

b-man avatar citrus-it avatar hadfl avatar r1mikey avatar richlowe avatar toasterson avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

arm64-gate's Issues

Fix nss_build

As @richlowe alread mentions inside the code we should fix the situation with nss_build

@richlowe can you add some details to that story here?

U-Boot calculates wrong version string

When I try to do make setup the u-boot script seems to calculate the wrong version string

mkdir -p /var/lib/abuild/arm64-gate/build/u-boot && \
gmake -C /var/lib/abuild/arm64-gate/src/u-boot V=1 O=/var/lib/abuild/arm64-gate/build/u-boot \
    HOSTCC="gcc -m64"                                    HOSTCFLAGS="-I/opt/ooce/include"                        HOSTLDLIBS="-L/opt/ooce/lib/amd64 -lnsl -lsocket" sandbox_defconfig && \
gmake -C /var/lib/abuild/arm64-gate/src/u-boot V=1 O=/var/lib/abuild/arm64-gate/build/u-boot \
    HOSTCC="gcc -m64"                                    HOSTCFLAGS="-I/opt/ooce/include"                        HOSTLDLIBS="-L/opt/ooce/lib/amd64 -lnsl -lsocket" tools && \
touch /var/lib/abuild/arm64-gate/stamps/u-boot-stamp
gmake[1]: Entering directory '/var/lib/abuild/arm64-gate/src/u-boot'
gmake -C /var/lib/abuild/arm64-gate/build/u-boot KBUILD_SRC=/var/lib/abuild/arm64-gate/src/u-boot \
-f /var/lib/abuild/arm64-gate/src/u-boot/Makefile sandbox_defconfig
gmake[2]: Entering directory '/var/lib/abuild/arm64-gate/build/u-boot'
gmake -f /var/lib/abuild/arm64-gate/src/u-boot/scripts/Makefile.build obj=scripts/basic
rm -f .tmp_quiet_recordmcount
ln -fsn /var/lib/abuild/arm64-gate/src/u-boot source
/bin/bash /var/lib/abuild/arm64-gate/src/u-boot/scripts/mkmakefile /var/lib/abuild/arm64-gate/src/u-boot
  GEN     Makefile
gmake -f /var/lib/abuild/arm64-gate/src/u-boot/scripts/Makefile.build obj=scripts/kconfig sandbox_defconfig
scripts/kconfig/conf  --defconfig=arch/../configs/sandbox_defconfig Kconfig
#
# configuration written to .config
#
gmake[2]: Leaving directory '/var/lib/abuild/arm64-gate/build/u-boot'
gmake[1]: Leaving directory '/var/lib/abuild/arm64-gate/src/u-boot'
gmake[1]: Entering directory '/var/lib/abuild/arm64-gate/src/u-boot'
gmake -C /var/lib/abuild/arm64-gate/build/u-boot KBUILD_SRC=/var/lib/abuild/arm64-gate/src/u-boot \
-f /var/lib/abuild/arm64-gate/src/u-boot/Makefile tools
gmake[2]: Entering directory '/var/lib/abuild/arm64-gate/build/u-boot'
gmake -f /var/lib/abuild/arm64-gate/src/u-boot/Makefile syncconfig
gmake -f /var/lib/abuild/arm64-gate/src/u-boot/scripts/Makefile.build obj=scripts/basic
rm -f .tmp_quiet_recordmcount
ln -fsn /var/lib/abuild/arm64-gate/src/u-boot source
/bin/bash /var/lib/abuild/arm64-gate/src/u-boot/scripts/mkmakefile /var/lib/abuild/arm64-gate/src/u-boot
  GEN     Makefile
gmake -f /var/lib/abuild/arm64-gate/src/u-boot/scripts/Makefile.build obj=scripts/kconfig syncconfig
scripts/kconfig/conf  --syncconfig Kconfig
gmake -f /var/lib/abuild/arm64-gate/src/u-boot/scripts/Makefile.autoconf || \
        { rm -f include/config/auto.conf; false; }
set -e; mkdir -p include/;      (echo "/* Automatically generated - do not edit */"; echo \#define CONFIG_BOARDDIR board/sandbox; echo \#include \<config_uncmd_spl.h\>; echo \#include \<configs/"sandbox".h\>; echo \#include \<asm/config.h\>; echo \#include \<linux/kconfig.h\>; echo \#include \<config_fallbacks.h\>;) < /var/lib/abuild/arm64-gate/src/u-boot/scripts/Makefile.autoconf > include/config.h.tmp; if [ -r include/config.h ] && cmp -s include/config.h include/config.h.tmp; then rm -f include/config.h.tmp; else : '  UPD     include/config.h'; mv -f include/config.h.tmp include/config.h; fi
  gcc -E -Wall -Wstrict-prototypes -Wno-format-security -fno-builtin -ffreestanding -std=gnu11 -fshort-wchar -fno-strict-aliasing -fno-PIE -Os -flto=63 -fstack-protector-strong -fno-delete-null-pointer-checks -Wno-pointer-sign -Wno-stringop-truncation -Wno-zero-length-bounds -Wno-array-bounds -Wno-stringop-overflow -Wno-maybe-uninitialized -fmacro-prefix-map=/var/lib/abuild/arm64-gate/src/u-boot/= -g -fstack-usage -Wno-format-nonliteral -Wno-address-of-packed-member -Wno-unused-but-set-variable -Werror=date-time -Wno-packed-not-aligned  -D__KERNEL__ -D__UBOOT__ -D__SANDBOX__ -U_FORTIFY_SOURCE -fPIC -I/usr/include/SDL2 -D_REENTRANT -pipe -Iinclude  -I/var/lib/abuild/arm64-gate/src/u-boot/include -I/var/lib/abuild/arm64-gate/src/u-boot/arch/sandbox/include -include /var/lib/abuild/arm64-gate/src/u-boot/include/linux/kconfig.h -nostdinc -isystem /usr/gcc/13/lib/gcc/x86_64-pc-solaris2.11/13.2.0/include  -DDO_DEPS_ONLY -dM /var/lib/abuild/arm64-gate/src/u-boot/include/common.h > u-boot.cfg.tmp && { grep 'define CONFIG_' u-boot.cfg.tmp | sed '/define CONFIG_IS_ENABLED(/d;/define CONFIG_IF_ENABLED_INT(/d;/define CONFIG_VAL(/d;' > u-boot.cfg; rm u-boot.cfg.tmp; } || { rm u-boot.cfg.tmp; false; }
  sed -n -f /var/lib/abuild/arm64-gate/src/u-boot/tools/scripts/define2mk.sed u-boot.cfg | while read line; do if [ -n "" ] || ! grep -q "${line%=*}=" include/config/auto.conf; then echo "$line"; fi; done > include/autoconf.mk
  gcc -x c -DDO_DEPS_ONLY -M -MP -Wall -Wstrict-prototypes -Wno-format-security -fno-builtin -ffreestanding -std=gnu11 -fshort-wchar -fno-strict-aliasing -fno-PIE -Os -flto=63 -fstack-protector-strong -fno-delete-null-pointer-checks -Wno-pointer-sign -Wno-stringop-truncation -Wno-zero-length-bounds -Wno-array-bounds -Wno-stringop-overflow -Wno-maybe-uninitialized -fmacro-prefix-map=/var/lib/abuild/arm64-gate/src/u-boot/= -g -fstack-usage -Wno-format-nonliteral -Wno-address-of-packed-member -Wno-unused-but-set-variable -Werror=date-time -Wno-packed-not-aligned  -D__KERNEL__ -D__UBOOT__ -D__SANDBOX__ -U_FORTIFY_SOURCE -fPIC -I/usr/include/SDL2 -D_REENTRANT -pipe -Iinclude  -I/var/lib/abuild/arm64-gate/src/u-boot/include -I/var/lib/abuild/arm64-gate/src/u-boot/arch/sandbox/include -include /var/lib/abuild/arm64-gate/src/u-boot/include/linux/kconfig.h -nostdinc -isystem /usr/gcc/13/lib/gcc/x86_64-pc-solaris2.11/13.2.0/include -MQ include/config/auto.conf /var/lib/abuild/arm64-gate/src/u-boot/include/common.h > include/autoconf.mk.dep || { rm include/autoconf.mk.dep; false; }
touch include/config/auto.conf
set -e; mkdir -p include/config/;       echo "2022.10$(/bin/bash /var/lib/abuild/arm64-gate/src/u-boot/scripts/setlocalversion /var/lib/abuild/arm64-gate/src/u-boot)" < include/config/auto.conf > include/config/uboot.release.tmp; if [ -r include/config/uboot.release ] && cmp -s include/config/uboot.release include/config/uboot.release.tmp; then rm -f include/config/uboot.release.tmp; else : '  UPD     include/config/uboot.release'; mv -f include/config/uboot.release.tmp include/config/uboot.release; fi
if [ -f /var/lib/abuild/arm64-gate/src/u-boot/.config -o -d /var/lib/abuild/arm64-gate/src/u-boot/include/config ]; then \
        echo >&2 "  /var/lib/abuild/arm64-gate/src/u-boot is not clean, please run 'make mrproper'"; \
        echo >&2 "  in the '/var/lib/abuild/arm64-gate/src/u-boot' directory.";\
        /bin/false; \
fi;
ln -fsn /var/lib/abuild/arm64-gate/src/u-boot source
/bin/bash /var/lib/abuild/arm64-gate/src/u-boot/scripts/mkmakefile /var/lib/abuild/arm64-gate/src/u-boot
  GEN     Makefile
set -e; mkdir -p include/generated/;    (echo \#define PLAIN_VERSION \"2022.10-dirty\"; echo \#define U_BOOT_VERSION \"U-Boot \" PLAIN_VERSION; echo \#define U_BOOT_VERSION_NUM 2022; echo \#define U_BOOT_VERSION_NUM_PATCH $(echo 10 | sed -e "s/^0*//"); echo \#define CC_VERSION_STRING \"$(LC_ALL=C gcc --version | head -n 1)\"; echo \#define LD_VERSION_STRING \"$(LC_ALL=C ld.bfd --version | head -n 1)\"; ) < include/config/uboot.release > include/generated/version_autogenerated.h.tmp; if [ -r include/generated/version_autogenerated.h ] && cmp -s include/generated/version_autogenerated.h include/generated/version_autogenerated.h.tmp; then rm -f include/generated/version_autogenerated.h.tmp; else : '  UPD     include/generated/version_autogenerated.h'; mv -f include/generated/version_autogenerated.h.tmp include/generated/version_autogenerated.h; fi
set -e; mkdir -p include/generated/;    (if test -n "${SOURCE_DATE_EPOCH}"; then SOURCE_DATE="@${SOURCE_DATE_EPOCH}"; DATE=""; for date in gdate date.gnu date; do ${date} -u -d "${SOURCE_DATE}" >/dev/null 2>&1 && DATE="${date}"; done; if test -n "${DATE}"; then LC_ALL=C ${DATE} -u -d "${SOURCE_DATE}" +'#define U_BOOT_DATE "%b %d %C%y"'; LC_ALL=C ${DATE} -u -d "${SOURCE_DATE}" +'#define U_BOOT_TIME "%T"'; LC_ALL=C ${DATE} -u -d "${SOURCE_DATE}" +'#define U_BOOT_TZ "%z"'; LC_ALL=C ${DATE} -u -d "${SOURCE_DATE}" +'#define U_BOOT_EPOCH %s'; else return 42; fi; else LC_ALL=C date +'#define U_BOOT_DATE "%b %d %C%y"'; LC_ALL=C date +'#define U_BOOT_TIME "%T"'; LC_ALL=C date +'#define U_BOOT_TZ "%z"'; LC_ALL=C date +'#define U_BOOT_EPOCH %s'; fi) < /var/lib/abuild/arm64-gate/src/u-boot/Makefile > include/generated/timestamp_autogenerated.h.tmp; if [ -r include/generated/timestamp_autogenerated.h ] && cmp -s include/generated/timestamp_autogenerated.h include/generated/timestamp_autogenerated.h.tmp; then rm -f include/generated/timestamp_autogenerated.h.tmp; else : '  UPD     include/generated/timestamp_autogenerated.h'; mv -f include/generated/timestamp_autogenerated.h.tmp include/generated/timestamp_autogenerated.h; fi
set -e; mkdir -p include/generated/;    (if test -n "${DEVICE_TREE}"; then echo \#define DEVICE_TREE \"\"; else echo \#define DEVICE_TREE CONFIG_DEFAULT_DEVICE_TREE; fi) < /var/lib/abuild/arm64-gate/src/u-boot/Makefile > include/generated/dt.h.tmp; if [ -r include/generated/dt.h ] && cmp -s include/generated/dt.h include/generated/dt.h.tmp; then rm -f include/generated/dt.h.tmp; else : '  UPD     include/generated/dt.h'; mv -f include/generated/dt.h.tmp include/generated/dt.h; fi
  if [ -f "/var/lib/abuild/arm64-gate/src/u-boot/board/sandbox/sandbox.env" ]; then cat /var/lib/abuild/arm64-gate/src/u-boot/board/sandbox/sandbox.env > include/generated/env.txt; elif [ -n "" ]; then echo "Missing file /var/lib/abuild/arm64-gate/src/u-boot/board/sandbox/.env"; else touch include/generated/env.txt ; fi
  if [ -s "/var/lib/abuild/arm64-gate/src/u-boot/board/sandbox/sandbox.env" ]; then gcc -E -P  -x assembler-with-cpp -D__ASSEMBLY__ -D__UBOOT_CONFIG__ -I . -I include -I /var/lib/abuild/arm64-gate/src/u-boot/include -include linux/kconfig.h -include include/config.h -I/var/lib/abuild/arm64-gate/src/u-boot/arch/sandbox/include include/generated/env.txt -o include/generated/env.in; else rm -f include/generated/env.in; touch include/generated/env.in ; fi
  awk -f /var/lib/abuild/arm64-gate/src/u-boot/scripts/env2string.awk include/generated/env.in >include/generated/environment.h
gmake -f /var/lib/abuild/arm64-gate/src/u-boot/scripts/Makefile.build obj=scripts/basic
rm -f .tmp_quiet_recordmcount
gmake -f /var/lib/abuild/arm64-gate/src/u-boot/scripts/Makefile.build obj=.
set -e; mkdir -p include/generated/;    (set -e; echo "#ifndef __GENERIC_ASM_OFFSETS_H__"; echo "#define __GENERIC_ASM_OFFSETS_H__"; echo "/*"; echo " * DO NOT MODIFY."; echo " *"; echo " * This file was generated by Kbuild"; echo " */"; echo ""; sed -ne     "s:[[:space:]]*\.ascii[[:space:]]*\"\(.*\)\":\1:; /^->/{s:->#\(.*\):/* \1 */:; s:^->\([^ ]*\) [\$#]*\([-0-9]*\) \(.*\):#define \1 \2 /* \3 */:; s:^->\([^ ]*\) [\$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; s:->::; p;}"; echo ""; echo "#endif" ) < lib/asm-offsets.s > include/generated/generic-asm-offsets.h.tmp; if [ -r include/generated/generic-asm-offsets.h ] && cmp -s include/generated/generic-asm-offsets.h include/generated/generic-asm-offsets.h.tmp; then rm -f include/generated/generic-asm-offsets.h.tmp; else : '  UPD     include/generated/generic-asm-offsets.h'; mv -f include/generated/generic-asm-offsets.h.tmp include/generated/generic-asm-offsets.h; fi
if test "./scripts/dtc/dtc" = "./scripts/dtc/dtc"; then \
        gmake -f /var/lib/abuild/arm64-gate/src/u-boot/scripts/Makefile.build obj=scripts/dtc; \
else \
        if ! ./scripts/dtc/dtc -v >/dev/null; then \
                echo '*** Failed to check dtc version: ./scripts/dtc/dtc'; \
                false; \
        else \
                if test "Error: Cannot find dtc: ./scripts/dtc/dtc" -lt 010406; then \
                        echo '*** Your dtc is too old, please upgrade to dtc 010406 or newer'; \
                        false; \
                else \
                        if [ -n "y" ]; then \
                                if ! echo "import libfdt" | python3 2>/dev/null; then \
                                        echo '*** pylibfdt does not seem to be available with python3'; \
                                        false; \
                                fi; \
                        fi; \
                fi; \
        fi; \
fi
gmake -f /var/lib/abuild/arm64-gate/src/u-boot/scripts/Makefile.build obj=scripts/dtc/pylibfdt
  unset CROSS_COMPILE; unset CFLAGS; CC="gcc -m64" LDSHARED="gcc -m64 -shared " LDFLAGS="" VERSION="u-boot-2022.10" CPPFLAGS="-I/opt/ooce/include -I/var/lib/abuild/arm64-gate/src/u-boot/scripts/dtc/libfdt" OBJDIR=scripts/dtc/pylibfdt SOURCES="/var/lib/abuild/arm64-gate/src/u-boot/scripts/dtc/libfdt/fdt.c /var/lib/abuild/arm64-gate/src/u-boot/scripts/dtc/libfdt/fdt_ro.c /var/lib/abuild/arm64-gate/src/u-boot/scripts/dtc/libfdt/fdt_wip.c /var/lib/abuild/arm64-gate/src/u-boot/scripts/dtc/libfdt/fdt_sw.c /var/lib/abuild/arm64-gate/src/u-boot/scripts/dtc/libfdt/fdt_rw.c /var/lib/abuild/arm64-gate/src/u-boot/scripts/dtc/libfdt/fdt_strerror.c /var/lib/abuild/arm64-gate/src/u-boot/scripts/dtc/libfdt/fdt_empty_tree.c /var/lib/abuild/arm64-gate/src/u-boot/scripts/dtc/libfdt/fdt_addresses.c /var/lib/abuild/arm64-gate/src/u-boot/scripts/dtc/libfdt/fdt_overlay.c scripts/dtc/pylibfdt/libfdt.i" SWIG_OPTS="-I/var/lib/abuild/arm64-gate/src/u-boot/scripts/dtc/libfdt -I/var/lib/abuild/arm64-gate/src/u-boot/scripts/dtc/libfdt/.." python3 /var/lib/abuild/arm64-gate/src/u-boot/scripts/dtc/pylibfdt/setup.py --quiet build_ext --inplace
Traceback (most recent call last):
  File "/var/lib/abuild/arm64-gate/src/u-boot/scripts/dtc/pylibfdt/setup.py", line 115, in <module>
    setup(
  File "/usr/lib/python3.9/vendor-packages/setuptools/_distutils/core.py", line 147, in setup
    _setup_distribution = dist = klass(attrs)
  File "/usr/lib/python3.9/vendor-packages/setuptools/dist.py", line 314, in __init__
    self.metadata.version = self._normalize_version(self.metadata.version)
  File "/usr/lib/python3.9/vendor-packages/setuptools/dist.py", line 350, in _normalize_version
    normalized = str(Version(version))
  File "/usr/lib/python3.9/vendor-packages/setuptools/_vendor/packaging/version.py", line 198, in __init__
    raise InvalidVersion(f"Invalid version: '{version}'")
setuptools.extern.packaging.version.InvalidVersion: Invalid version: 'u-boot-c'
gmake[4]: *** [/var/lib/abuild/arm64-gate/src/u-boot/scripts/dtc/pylibfdt/Makefile:30: rebuild] Error 1
gmake[3]: *** [/var/lib/abuild/arm64-gate/src/u-boot/scripts/Makefile.build:398: scripts/dtc/pylibfdt] Error 2
gmake[2]: *** [/var/lib/abuild/arm64-gate/src/u-boot/Makefile:2035: scripts_dtc] Error 2
gmake[2]: Leaving directory '/var/lib/abuild/arm64-gate/build/u-boot'
gmake[1]: *** [Makefile:177: sub-make] Error 2
gmake[1]: Leaving directory '/var/lib/abuild/arm64-gate/src/u-boot'
*** Error code 2
make: Fatal error: Command failed for target `/var/lib/abuild/arm64-gate/stamps/u-boot-stamp'

Seems it should be a valid semver but I can't find out from where it picks up this string.
We don't set it. Has this happened before?

Make `make download` only download missing pieces

This is something we have in both oi-userland and omnios build with helper programs/bash functions

This will help make the process easier to repeat and at the same time save time on slow internet lines (like mine)

My suggestion is to make something akin to userland-fetch or the omnios shell function that can be called from other languages as needed.

Synthetic Packages do not get Published correctly and need to be published during image build

In build_disk.sh we have the following todo.

# for reasons I can't fathom, synthetic packages don't get published right now
pkgsend publish -s illumos-gate/packages/aarch64/nightly/repo.redist \
    illumos-gate/usr/src/pkg/packages.aarch64/osnet-incorporation.mog
pkgsend publish -s illumos-gate/packages/aarch64/nightly/repo.redist \
    illumos-gate/usr/src/pkg/packages.aarch64/osnet-redist.mog

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.