Bootstrapping arm64

Bootstrapping arm64

Install FreeBSD 14 from a Snapshot ISO

  • Download and install the VMware Fusion M1 tech preview (opens in a new tab)
  • Download the newest FreeBSD disc1.iso file from the FreeBSD FTP server (opens in a new tab)
  • Create a VM using the ISO as boot/install media, increase the number of CPUs and the amount of RAM (I did 4/16GB), and increase the drive size to at least 60GB.
  • Install FreeBSD
    • For the filesystem, choose a guided ZFS install
    • Name the pool "ravynOS"
    • Finish the install and reboot
  • Install packages required for bootstrapping
pkg install -fy git-tiny cmake gmake ninja
  • Clone the repos
rm -rf /usr/src/*; \
  git clone --depth 30 --branch ranger/arm64 \
  https://github.com/RangerRick/ravynos.git /usr/src && \
 rm -rf /usr/ports/*; \
  git clone --depth 30 --branch ranger/bootstrap-ports \
  https://github.com/RangerRick/freebsd-ports.git /usr/ports
  • Build the kernel and reboot
cd /usr/src
make -j$(sysctl -n hw.ncpu) \
  MK_LIB32=no \
  KERNCONF=RAVYN \
  COMPILER_TYPE=clang \
  buildkernel && \
make -C release \
  MK_LIB32=no \
  NOSRC=true \
  NOPORTS=true \
  KERNCONF=RAVYN \
  COMPILER_TYPE=clang \
  kernel.txz && \
make \
  MK_LIB32=no \
  NOSRC=true \
  NOPORTS=true \
  KERNCONF=RAVYN \
  COMPILER_TYPE=clang \
  installkernel && \
  reboot
  • Build the base operating system
cd /usr/src
ln -s /usr/local/bin/cmake /usr/bin/
make -j$(sysctl -n hw.ncpu) \
  MALLOC_PRODUCTION=1 \
  WITHOUT_CLEAN=1 \
  MK_LIB32=no \
  COMPILER_TYPE=clang \
  buildworld && \
make -C release \
  MK_LIB32=no \
  NOSRC=true \
  NOPORTS=true \
  KERNCONF=RAVYN \
  COMPILER_TYPE=clang \
  base.txz
  • Bootstrap the base ports
ln /usr/local/sbin/pkg-static /usr/sbin/
cd /usr/ports
mkdir -p dist; cp /usr/obj/usr/src/*/release/base.txz dist/
PORTSROOT="$(find /usr/obj/*/portsroot -print | head -n 1)"
mkdir -p ${PORTSROOT}/usr/src ${PORTSROOT}/usr/ports && \
  mount_nullfs /usr/src   ${PORTSROOT}/usr/src && \
  mount_nullfs /usr/ports ${PORTSROOT}/usr/ports && \
  make -f Makefile.ports prepports && \
  mount -t devfs none ${PORTSROOT}/dev && \
  mount -t procfs none ${PORTSROOT}/proc && \
  make -f Makefile.ports buildbootstrap && \
  make -f Makefile.ports makepackages
  • Finally, build the ravynOS Core
# not sure what unmounts this, but we need it in the chroot
mount_nullfs /usr/src ${PORTSROOT}/usr/src
chroot ${PORTSROOT} /usr/bin/zsh
# TODO: zsh port should be modified to just install to /bin
ln /usr/bin/zsh /bin/zsh
cd /usr/src
make COMPILER_TYPE=clang -f Makefile.ravynOS prep && \
cp -fv share/mk/* /usr/share/mk/ && \
make COMPILER_TYPE=clang -f Makefile.ravynOS
# exit the chroot to install to the base system
exit
cd /usr/src
make COMPILER_TYPE=clang -f Makefile.ravynOS install