Skip to content

Latest commit

 

History

History
670 lines (507 loc) · 30.8 KB

CONTRIBUTING.md

File metadata and controls

670 lines (507 loc) · 30.8 KB

winesapOS Contributor Guide

Getting Started

There are various different ways to contribute to winesapOS:

This guide focuses on the technical architecture and workflows for winesapOS development.

Architecture

Partitions

Performance Image

Partition Label File System Size Description
1 None None 2 MiB BIOS boot backwards compatibility.
2 wos-drive exFAT 16 GiB Cross-platform flash drive storage.
3 WOS-EFI FAT32 500 MiB UEFI boot firmware.
4 winesapos-boot ext4 1 GiB GRUB boot loader and Linux kernel.
5 winesapos-root Btrfs 100% The root and home file systems.

Secure Image

Partition Label File System Size Description
1 None None 2 MiB BIOS boot backwards compatibility.
2 wos-drive exFAT 16 GiB Cross-platform flash drive storage.
3 WOS-EFI FAT32 500 MiB UEFI boot firmware.
4 winesapos-boot ext4 1 GiB GRUB boot loader and Linux kernel.
5 winesapos-luks LUKS 100% The encrypted root and home file systems.
/dev/mapper/cryptroot winesapos-root Btrfs 100% The root and home file systems.

Minimal Image

Partition Label File System Size Description
1 None None 2 MiB BIOS boot backwards compatibility.
2 WOS-EFI FAT32 500 MiB UEFI boot firmware.
3 winesapos-boot ext4 1 GiB GRUB boot loader and Linux kernel.
4 winesapos-root Btrfs 100% The root and home file systems.

Drivers

Mac

These drivers are provided for better compatibility with the lastest Macs with Intel processors:

  • linux-t2 = Contains patches for the T2 chip, trackpad, keyboard, storage, and audio support.
  • apple-bcm-firmware = Firmware files for the Wi-Fi on T2 Macs.
  • apple-t2-audio-config = Configuration files for the speakers, microphone, and 3.5mm headphone jack to work correctly.
  • touchbard = A service to manage the Touch Bar.

Files

These are a list of custom files and script that we install as part of winesapOS:

  • /etc/NetworkManager/conf.d/wifi_backend.conf = Configures NetworkManger to use the IWD backend.
    • Source: scripts/winesapos-install.sh
  • `/etc/modules-load.d/winesapos-mac.conf = Enable the T2 driver (apple-bce).
    • Source: scripts/winesapos-install.sh
  • /etc/modprobe.d/framework-als-deactivate.conf = If a Framework laptop is detected, the ambient light sensor is disabled to fix input from special keys on the keyboard.
    • Source: scripts/winesapos-setup.sh
  • /etc/modprobe.d/winesapos-amd.conf = Enable the AMDGPU driver for older graphics cards and apply various driver workarounds for known issues.
    • Source: scripts/winesapos-install.sh
  • /etc/modprobe.d/winesapos-mac.conf = Enable the Touch Bar driver (apple-touchbar) and disable the Ethernet over USB drivers which T2 Macs do not support.
    • Source: scripts/winesapos-install.sh
    • Source: scripts/winesapos-setup.sh
  • /etc/snapper/configs/{root,home} = The Snapper configuration for Btrfs backups.
    • Source: files/etc-snapper-configs-root
  • /etc/sysctl.d/00-winesapos.conf = Configures a lower swappiness level and increases the open files limit.
    • Source: scripts/winesapos-install.sh
  • /etc/systemd/system.conf.d/20-file-limits.conf = Configure a higher open files limit.
    • Source: scripts/winesapos-install.sh
  • /etc/systemd/system/snapper-cleanup-hourly.timer = A systemd timer for cleaning up Snapper snapshots every hour.
    • Source: scripts/winesapos-install.sh
  • /etc/systemd/user/winesapos-mute.service = A user (not system) service for muting all audio. This is required for some newer Macs that have in-development hardware drivers that are extremely loud by default.
    • Source: files/winesapos-mute.service
  • /usr/local/bin/winesapos-mute.sh = The script for the winesapos-mute.service.
    • Source: scripts/winesapos-mute.sh
  • /etc/systemd/system/pacman-mirrors.service = On Manjaro builds, this provides a service to find and configure the fastest mirrors for Pacman. This is not needed on Arch Linux builds as it has a Reflector service that comes with a service file.
    • Source: files/pacman-mirrors.service
  • /etc/systemd/system/winesapos-resize-root-file-system.service = A service that runs a script to resize the root file system upon first boot.
    • Source: winesapos-resize-root-file-system.service
  • /etc/winesapos/graphics = The graphics type that was selected during the setup process: amd, intel, nvidia-new, nvidia-old, virtualbox, or vmware.
    • Source: scripts/winesapos-setup.sh
  • /etc/winesapos/IMAGE_TYPE = The image type that was set during the build process.
    • Source: scripts/winesapos-install.sh
  • /etc/winesapos/VERSION = The version of winesapOS that is installed.
    • Source: VERSION
  • /home/winesap/.winesapos/winesapos-setup.desktop = A desktop shortcut for the winesapOS First-Time Setup wizard.
    • Source: files/winesapos-setup.desktop
  • /home/winesap/.winesapos/winesapos-upgrade.desktop = A desktop shortcut for the winesapOS Upgrade wizard.
    • Source: files/winesapos-upgrade.desktop
  • /usr/local/bin/winesapos-resize-root-file-system.sh = The script used for the winesapos-resize-root-file-system.service.
    • Source: scripts/winesapos-resize-root-file-system.sh
  • /home/winesap/.winesapos/winesapos-setup.sh = The script used for the winesapOS First-Time Setup wizard.
    • Source: scripts/winesapos-setup.sh
  • /home/winesap/.winesapos/winesapos_logo_icon.png = The winesapOS logo as a 96x96 icon for the winesapOS First-Time Setup and winesapOS Upgrade desktop shortcuts.
    • Source: files/winesapos_logo_icon.png
  • /home/winesap/.winesapos/winesapos-upgrade-remote-stable.sh = The script used for the winesapOS Upgrade wizard. It pulls the latest upgrade script from the "stable" branch of winesapOS.
    • Source: scripts/winesapos-upgrade-remote-stable.sh

Build

Container Versus Virtual Machine Builds

Use a container build for:

  • Automated development builds. Run a single command to build a new winesapOS image.
  • CI/CD builds. Quickly test and publish new changes.

Use a virtual machine build for:

  • GPU passthrough. Applications and games that require GPU acceleration can be thoroughly tested.
  • Desktop testing. Reboot directly into a virtual machine to see and manually test new changes that require user interaction.
  • Release builds. This properly sets the UEFI boot name in the release image which is not possible within a container.

Download the Installer

Depending on which Arch Linux distribution you want to build, download the related installer. Both Arch Linux and Manjaro provide ISOs for a live CD environment.

Create Virtual Machine

A virtual machine is used to build winesapOS in a safe and isolated manner. The disks on the hypervisor will not be touched. It is assumed that QEMU/KVM will be used although other hypervisors can be used.

Requirements:

  • UEFI boot
  • 2 vCPUs
  • 12 GB RAM
  • Storage
    • Performance or secure image = 25 GiB storage (to fit on a 32 GB flash drive)
    • Minimal image = 7 GiB storage (to fit on an 8 GB flash drive)

virt-install (CLI)

  • Create the virtual storage device.

    • Performance or secure image:

      sudo qemu-img create -f raw -o size=25G /var/lib/libvirt/images/winesapos.img
      
    • Minimal image:

      sudo qemu-img create -f raw -o size=7G /var/lib/libvirt/images/winesapos.img
      
  • Create the virtual machine to use for installing winesapOS.

    • Arch Linux and Manjaro use an installer ISO image.

      sudo virt-install --name winesapos --boot loader=/usr/share/edk2-ovmf/x64/OVMF_CODE.fd,loader.readonly=yes,loader.secure='no',loader.type=pflash --vcpus 2 --memory 12288 --disk path=/var/lib/libvirt/images/winesapos.img,bus=virtio,cache=none --cdrom=/var/lib/libvirt/images/<INSTALLER_ISO>
      

virt-manager (GUI)

Arch Linux and Manjaro:

  1. Virtual Machine Manager (virt-manager)
  2. File
  3. New Virtual Machine
  4. Local install media (ISO image or CDROM)
  5. Forward
  6. Choose ISO or CDROM install media: <INSTALLER_ISO>
  7. Forward
  8. Memory: 12288
  9. CPUs: 2
  10. Forward
  11. Enable storage for this virtual machine: yes
  12. Create a disk image for the virtual machine:
  • Performance or secure image = 25.0 GiB
  • Minimal image = 7.0 GiB
  1. Forward
  2. Name: winesapOS
  3. Customize configuration before install: yes
  4. Finish
  5. Overview
  6. Firmware: UEFI x86_64: /usr/share/edk2-ovmf/x64/OVMF_CODE.fd
  7. Apply
  8. Begin Installation

GNOME Boxes (GUI)

GNOME Boxes can be installed on any Linux distribution using Flatpak: flatpak install org.gnome.Boxes.

  1. +

  2. Download and operating system

  3. (Select the three dots to show all available operating systems)

  4. (Search for and select "Arch Linux x86_64 (Live)")

  5. Review and Create

    • Memory: 12.0 GiB

    • Storage limit:

      • Performance or secure image = 25.0 GiB
      • Minimal image = 7.0 GiB
    • Enable EFI: Yes

  6. Create

The created QCOW2 image will be stored as a file here: ~/.var/app/org.gnome.Boxes/data/gnome-boxes/images/archlinux. The downloaded ISO is stored as a file here: ~/Downloads/archlinux-x86_64.iso.

Environment Variables for Installation

For specialized builds, use environment variables to modify the installation settings.

$ export <KEY>=<VALUE>
Key Values Performance Value (Default) Secure Value Minimal Value Description
WINESAPOS_DEBUG_INSTALL true or false true true true Use set -x for debug shell logging during the installation.
WINESAPOS_DEBUG_TESTS true or false false false false Use set -x for debug shell logging during the tests.
WINESAPOS_ENABLE_TESTING_REPO true or false false false false Use the [winesapos-testing] repository instead of the stable [winesapos] repository during the installation.
WINESAPOS_BUILD_IN_VM_ONLY true or false true true true If the build should fail and exit if it is not in a virtual machine. Set to false for a bare-metal installation.
WINESAPOS_CREATE_DEVICE true or false false false false If the build should create and use an image file instead of using an existing block device.
WINESAPOS_CREATE_DEVICE_SIZE integer for GiB (None) (None) (None) Manually override the default values for the device size (7 GiB with no portable storage and 25 GiB with).
WINESAPOS_DEVICE vda vda vda If WINESAPOS_CREATE=false, then use the existing /dev/${WINESAPOS_DEVICE} block device to install winesapOS onto.
WINESAPOS_ENABLE_PORTABLE_STORAGE true true false If the 16 GiB exFAT flash drive storage should be enabled.
WINESAPOS_BUILD_CHROOT_ONLY false false false If partitioning and GRUB should be skipped for a chroot installation.
WINESAPOS_INSTALL_DIR /winesapos /winesapos /winesapos The chroot directory where winesapOS will be installed into.
WINESAPOS_DISTRO arch or manjaro arch arch arch The Linux distribution to install with.
WINESAPOS_HTTP_PROXY (None) (None) (None)
WINESAPOS_HTTP_PROXY_CA (None) (None) (None)
WINESAPOS_DE cinnamon, gnome, or plasma plasma plasma plasma The desktop environment to install.
WINESAPOS_USER_NAME winesap winesap winesap The name of the user to create.
WINESAPOS_ENCRYPT true or false false true false If the root partition should be encrypted with LUKS.
WINESAPOS_ENCRYPT_PASSWORD password password password The default password for the encrypted root partition.
WINESAPOS_LOCALE en_US.UTF-8 UTF-8 en_US.UTF-8 UTF-8 en_US.UTF-8 UTF-8 The locale to use for /etc/locale.gen.
WINESAPOS_APPARMOR true or false false true false If Apparmor should be installed and enabled.
WINESAPOS_PASSWD_EXPIRE true or false false true false If the root and winesap user passwords will be forced to be changed after first login.
WINESAPOS_SUDO_NO_PASSWORD true or false true false true If the user can run sudo without entering a password.
WINESAPOS_FIREWALL true or false false true false If a firewall (firewalld) will be installed.
WINESAPOS_CPU_MITIGATIONS true or false false true false If processor mitigations should be enabled in the Linux kernel.
WINESAPOS_DISABLE_KERNEL_UPDATES true or false false false false If the Linux kernels should be excluded from being upgraded by Pacman.
WINESAPOS_DISABLE_KWALLET true or false true false true If Kwallet should be enabled for securing various passwords.
WINESAPOS_ENABLE_KLIPPER true or false true false true If Klipper should be disabled (as much as it can be) for storing copied text.
WINESAPOS_INSTALL_GAMING_TOOLS true or false true true false Install all gaming tools and launchers.
WINESAPOS_INSTALL_PRODUCTIVITY_TOOLS true or false true true false Install all productivity tools.
WINESAPOS_AUTO_LOGIN true or false true false true Set the default user to login automatically without a password.
WINESAPOS_IMAGE_TYPE minimal, performance, or secure performance secure minimal The image type to set in the file /etc/winesapos/IMAGE_TYPE.
WINESAPOS_CUSTOM_SCRIPT (None) (None) (None) A custom script to run before the installation does a cleanup.
WINESAPOS_GITHUB_ACTIONS_TESTS true or false false false false Used to control if certain tests with known issues should run in GitHub Actions (true) or not (false).

Install winesapOS

Once the virtual machine is running, a distribution of Arch Linux for winesapOS can be installed. An automated script is provided to fully install the operating system. This script will only work in a virtual machine. Clone the entire project repository. This will provide additional files and scripts that will be copied into the virtual machine image.

Arch Linux requires installing the required git dependency.

$ sudo pacman -S -y
$ sudo pacman -S git

Clone the GitHub repository:

$ git clone https://github.com/lukeshortcloud/winesapos.git
$ cd winesapos/scripts/

Before running the installation script, optionally set environment variables to configure the build. Use sudo -E to load the environment variables.

  • Performance-focused image build:

    • Arch Linux (default):

      # export WINESAPOS_DISTRO=arch
      # bash ./winesapos-install.sh
      
    • Manjaro:

      $ export WINESAPOS_DISTRO=manjaro
      $ sudo -E bash ./winesapos-install.sh
      
  • Security-focused image build requires first sourcing the environment variables:

    • Arch Linux:

      # export WINESAPOS_DISTRO=arch
      # . ./env/winesapos-env-secure.sh
      # bash ./winesapos-install.sh
      
    • Manjaro:

      $ export WINESAPOS_DISTRO=manjaro
      $ . ./env/winesapos-env-secure.sh
      $ sudo -E bash ./winesapos-install.sh
      
  • Minimal storage-focused image build requires first sourcing the environment variables:

    • Arch Linux:

      # export WINESAPOS_DISTRO=arch
      # . ./env/winesapos-env-minimal.sh
      # bash ./winesapos-install.sh
      
    • Manjaro:

      $ export WINESAPOS_DISTRO=manjaro
      $ . ./env/winesapos-env-minimal.sh
      $ sudo -E bash ./winesapos-install.sh
      

When complete, run the automated tests and then shutdown the virtual machine (do NOT restart). The image can then be cleaned up and used for manual testing on an external storage device.

Automated Container Build

The .github/workflows/main.yml GitHub Actions workflow has the steps needed to automatically build an image using a container. These can be run manually:

$ sudo docker pull archlinux:latest
$ sudo docker build --pull --no-cache -t winesapos-img-builder build/.
$ sudo docker run --rm -v $(pwd):/workdir -v /dev:/dev --privileged=true winesapos-img-builder:latest /bin/bash -x /workdir/scripts/winesapos-build.sh

The resulting image will be built and available here: scripts/winesapos.img.

Tests

Matrix

These are all of the scenarioes that need to be tested and working before a release.

OS Performance Secure Plasma Cinnamon GNOME
Arch Linux x x x x x
Manjaro x x x x x

Automatic

Run the tests to ensure that everything was setup correctly. These are automatically ran and logged as part of the install script. The tests must be run with Bash.

$ sudo bash ./winesapos-tests.sh

Manual

On the hypervisor, clean up the virtual machine image. This will ensure that the image will generated unique values for additional security and stability. The customize operation is disabled because the operation will set a new machine-id which is not what we want. Our image already has a blank /etc/machine-id file which will be automatically re-generated on first boot.

$ sudo virt-sysprep --operations defaults,-customize -a /var/lib/libvirt/images/winesapos.img

Optionally flash the image onto an external storage device for testing hardware. Otherwise, run manual tests using a virtual machine.

$ sudo dd if=/var/lib/libvirt/images/winesapos.img of=/dev/<DEVICE>

Manual tests:

  • Accept every first-time setup option to install and configure the system.
  • Open and use every program on the desktop.
  • Package Managers
    • Discover
      • Install a Pacman package: apache
      • Install a Flatpak package: org.gnome.BreakTimer
    • bauh
      • Install a Pacman package: nginx
      • Install a Flatpak package: org.gabmus.gfeeds
      • Install an AUR package: cmatrix-git
      • Install a Snap package: lxd
    • AppImagePool
      • Install an AppImage: GitNote
Upgrades

By default, the winesapOS upgrade script will update all upgrade files and exit if there are changes detected. For testing on a branch that is not stable (such as test), set an environment variable to skip updating upgrade files as these are pulled from the stable branch.

export WINESAPOS_UPGRADE_FILES=false
export WINESAPOS_UPGRADE_TESTING_REPO=true
export WINESAPOS_UPGRADE_VERSION_CHECK=false
curl https://raw.githubusercontent.com/LukeShortCloud/winesapOS/test/scripts/winesapos-upgrade.sh | sudo -E bash

Workflows

Adding Applications

For new contributors:

  • Fork the main branch of the LukeShortCloud/winesapOS git repository.
  • All shell scripts are written in Bash.
    • Check for syntax errors by using the command bash -n ${SCRIPT_FILE}.

If adding a new application to winesapOS, these are all of the places it needs to be updated:

  • README.md needs to mention that application under the "Usability" or "Gaming support" sections under the "Features" header.
  • CHANGELOG.md needs to mention that the application has has been Added, Changed, or Removed.
  • src/winesapos-install.sh
    • The installer copies shortcut files for GUI applications to the desktop.
  • src/winesapos-tests.sh needs updated tests to at least check for the existence of the package and desktop shortcut (if applicable).

Updating Linux Kernels

winesapOS ships two Linux kernels:

  • Linux T2 = The latest stable Linux kernel with additional patches to support Intel Macs with the Apple T2 Security Chip.
  • Linux LTS = The latest upstream Linux LTS kernel.
    • A new version of this kernel is released every year around December.
      • For Arch Linux builds, linux-lts is already used. For Manjaro builds, the linux<MAJOR_VERSION><MINOR_VERSION> package needs to be updated.
      • The Mac drivers need to build cleanly against this kernel.

Build Packages for winesapOS Repository

A container and script are provided to pre-build important AUR packages for winesapOS.

cd scripts/repo/
sudo docker build --pull --no-cache --tag ekultails/winesapos-build-repo:latest .
mkdir /tmp/winesapos-build-repo
chmod 777 /tmp/winesapos-build-repo
sudo docker run --name winesapos-build-repo --rm --volume /tmp/winesapos-build-repo:/output ekultails/winesapos-build-repo:latest &> /tmp/winesapos-build-repo_$(date --iso-8601=seconds).log

Check to see what packages succeeded or failed to be built:

grep -P "PASSED|FAILED" /tmp/winesapos-build-repo_*.log

Those packages are then hosted on a Kubernetes cluster with the following requirements:

Apply all of the Kubernetes manifests to create NGINX containers on the Kubernetes cluster.

kubectl apply -f scripts/repo/k8s/

For copying new packages over, temporarily set deployment.spec.template.spec.containers.volumeMounts[0].readOnly to false.

kubectl --namespace winesapos-repo edit deployment deploy-winesapos-repo

Then copy the new files into one of the containers. A single persistent volume claim is shared among all of the containers.

kubectl --namespace winesapos-repo cp <PACKAGE_FILE> deploy-winesapos-repo-<UUID>:/usr/share/nginx/html/

Environment Variables for Repository Build

For specialized repository builds, use environment variables to determine what packages will be built.

sudo docker run --name winesapos-build-repo --rm --env WINESAPOS_REPO_BUILD_TESTING=true --env WINESAPOS_REPO_BUILD_LINUX_GIT=true --env WINESAPOS_REPO_BUILD_MESA_GIT=true --volume /tmp/winesapos-build-repo:/output ekultails/winesapos-build-repo:latest &> /tmp/winesapos-build-repo_$(date --iso-8601=seconds).log
Key Values Default Description
WINESAPOS_REPO_BUILD_TESTING true or false false Name the Pacman repository database as "winesapos-testing" instead of "winesapos".
WINESAPOS_REPO_BUILD_LINUX_GIT true or false false Build linux-git.
WINESAPOS_REPO_BUILD_MESA_GIT true or false false Build mesa-git and lib32-mesa-git.

GPG Signing

As of winesapOS 3.4.0, all packages and the metadata database are signed using a GPG key.

  • Sign all of the packages:
    for pkg in $(ls -1); do gpg --detach-sign --no-armor ${pkg}; done
    
  • Update and sign the database:
    repo-add --verify --sign winesapos.db.tar.gz ./*.pkg.tar.zst
    

Custom Scripts

winesapOS supports running custom scripts before the installation finishes.

Specify the script to run before running winesapos-install.sh:

$ export WINESAPOS_CUSTOM_SCRIPT=/path/to/script.sh

Hints for writinng a custom script:

  • Source the scripts/env/winesapos-env-defaults.sh environment variables to load useful functions.
  • Use one of the provided functions to install an application:
    • ${CMD_FLATPAK_INSTALL[*]}
    • ${CMD_PACMAN_INSTALL[*]}
    • ${CMD_YAY_INSTALL[*]}
  • Use ${WINESAPOS_INSTALL_DIR} to reference the chroot directory used as part of the installation.

Wayback Machine Backups

On the server that hosts the winesapOS repository, run these commands to automatically backup all of the files to the Wayback Machine (Internet Archive):

$ export WINESAPOS_VERSION=3.3.0
$ cd /data/winesapos-repo/repo/winesapos-${WINESAPOS_VERSION}
$ curl -v https://web.archive.org/save/https://winesapos.lukeshort.cloud/repo/${WINESAPOS_VERSION}
$ find . -exec curl -v https://web.archive.org/save/https://winesapos.lukeshort.cloud/repo/${WINESAPOS_VERSION}/{} \;

It is also possible for a community member to do a backup by downloading the a mirror of the repository to their computer first:

$ wget -m https://winesapos.lukeshort.cloud/repo/
$ cd winesapos.lukeshort.cloud
$ find . -name "*.html" -exec curl -v "https://web.archive.org/save/https://{}" ';'

Release

Checklist

These are tasks the need to happen before publishing a stable release.

  • Rebuild all AUR packages.

    • First publish them to the [winesapos-testing] repository and test them via a new build.
    • For the stable build and release, move these packages to the [winesapos] repository.
  • Update the versions for these programs by changing these variables:

    • scripts/winesapos-install.sh
      • ETCHER_VER
      • YAY_VER
    • scripts/winesapos-setup.sh
      • PROTON_GE_VERSION
    • scripts/winesapos-upgrade.sh
      • ETCHER_VER
    • scripts/repo/winesapos-build-repo.sh
      • YAY_VER
  • Delete old git branches:

    git branch -D <BRANCH>
    git push --delete origin <BRANCH>
    
  • Test upgrades from every old stable version to the new stable version.

Publishing

  • Add upgrade notes to the UPGRADES.md file.

  • For a new release, update the VERSION file in the git repository with the new version before building an image.

  • Before building an alpha of beta build, enable the [winesapos-testing] repository with export WINESAPOS_ENABLE_TESTING_REPO=true.

  • After a build, make sure that no tests failed by checking the exit/return code of the installation script. That number will be automatically printed to the screen and it is the number of failed tests.

  • On the hypervisor, stop the virtual machine and then sanitize the image.

    $ sudo virt-sysprep --operations defaults,-customize -a /var/lib/libvirt/images/winesapos.img
    
  • Create a release by using the universal zip compression utility. Do this for the build of the "performance" (default), "secure", and "minimal" images.

    $ cd /var/lib/libvirt/images/
    $ sudo mv winesapos.img winesapos-<VERSION>-[performance|secure|minimal].img
    $ sudo zip winesapos-<VERSION>-[performance|secure|minimal].img.zip winesapos-<VERSION>-[performance|secure|minimal].img
    $ ls -1 | grep winesapos
    winesapos-<VERSION>-[performance|secure|minimal].img
    winesapos-<VERSION>-[performance|secure|minimal].img.zip
    
  • Create SHA512 checkums separately for the "performance", "secure", and "minimal" images and their related archive files. Users can then use those files to check for corruption or tampering.

    $ sha512sum winesapos-<VERSION>-[performance|secure|minimal]* > winesapos-<VERSION>-[performance|secure|minimal].sha512sum.txt
    $ sha512sum --check winesapos-<VERSION>-[performance|secure|minimal].sha512sum.txt
    
  • Take a screenshot of the desktop for the secure image. It has all of the applications that the performance has in addition to the "Firewall" GUI provided by firewalld.

    • Set the desktop resolution to 1280x768.
    • Use Squoosh to compress the image.
    • Upload the image to a GitHub issue.
    • Update the hyperlink used in the README.md file.
  • Create a git tag and push it.

    $ git tag X.Y.Z
    $ git push origin X.Y.Z
    
  • Sync the stable branch with the latest tag. This is required for the upgrade script. Old versions of winesapOS will pull the latest upgrade script from the stable branch.

    $ git checkout stable
    $ git rebase X.Y.Z
    $ git push origin stable
    
  • Upload the images to be hosted at https://winesapos.lukeshort.cloud/repo/iso/winesapos-${WINESAPOS_VERSION}/ and also on the Internet Archive.

    $ cd /usr/local/bin/
    $ sudo url -LOs https://archive.org/download/ia-pex/ia
    $ sudo chmod +x /usr/local/bin/ia
    $ ia configure
    $ export WINESAPOS_VERSION=3.3.0
    $ export WINESAPOS_VERSION_NO_PERIODS=330
    $ cd /data/winesapos-repo/repo/iso/winesapos-${WINESAPOS_VERSION}/
    $ ia upload winesapos-${WINESAPOS_VERSION_NO_PERIODS} winesapos-${WINESAPOS_VERSION}-minimal.img.zip winesapos-${WINESAPOS_VERSION}-minimal.sha512sum.txt winesapos-${WINESAPOS_VERSION}-performance.img.zip winesapos-${WINESAPOS_VERSION}-performance.sha512sum.txt winesapos-${WINESAPOS_VERSION}-secure.img.zip winesapos-${WINESAPOS_VERSION}-secure.sha512sum.txt --metadata="mediatype:data" --metadata="title:winesapOS ${WINESAPOS_VERSION}" --metadata="creator:Luke Short" --metadata="summary:https://github.com/LukeShortCloud/winesapOS/releases/tag/${WINESAPOS_VERSION}"