Download Latest Version gary-os-v9.0-generic_64.kernel (982.4 MB)
Email in envelope

Get an email when there's a new version of GaryOS

Home / packages / app-arch
Name Modified Size InfoDownloads / Week
Parent folder
rpm-4.20.0.gpkg.tar 2025-03-06 860.2 kB
cabextract-1.11.gpkg.tar 2025-03-06 61.4 kB
sharutils-4.15.2-r3.gpkg.tar 2025-03-06 184.3 kB
p7zip-17.05-r2.gpkg.tar 2025-03-06 2.2 MB
lha-114i_p20210328.gpkg.tar 2025-03-06 163.8 kB
dpkg-1.21.15-r3.gpkg.tar 2025-03-06 972.8 kB
gcab-1.6.gpkg.tar 2025-03-06 102.4 kB
snappy-1.1.10-r1.gpkg.tar 2025-03-06 71.7 kB
brotli-1.1.0.gpkg.tar 2025-03-06 409.6 kB
libarchive-3.7.7.gpkg.tar 2025-03-05 553.0 kB
zstd-1.5.6.gpkg.tar 2025-03-05 512.0 kB
lz4-1.10.0-r1.gpkg.tar 2025-03-05 184.3 kB
tar-1.35.gpkg.tar 2025-03-05 542.7 kB
xz-utils-5.6.3.gpkg.tar 2025-03-05 235.5 kB
rpm2targz-2021.03.16.gpkg.tar 2025-03-05 30.7 kB
cpio-2.15.gpkg.tar 2025-03-05 143.4 kB
gzip-1.13-r1.gpkg.tar 2025-03-05 174.1 kB
zip-3.0-r7.gpkg.tar 2025-03-05 276.5 kB
unzip-6.0_p27-r1.gpkg.tar 2025-03-05 204.8 kB
bzip2-1.0.8-r5.gpkg.tar 2025-03-05 307.2 kB
ncompress-5.0-r2.gpkg.tar 2025-03-05 51.2 kB
Totals: 21 Items   8.2 MB 0

These are to make sure everything is cross-linked, and that this section is complete.

Loader

The sole purpose of Loader is to create and load a Filesystem into memory when Booting. This process and the rationale behind it are detailed in Design. Loader also creates Kernel and Rootfs for distribution using Image.

Loader is more of an abstract concept than it is an actual thing, but it is most helpful to think of it this way.

Responsibilities

Component Purpose
Makefile Wrapper around the other components
gentoo/_system All environment and variable initialization
gentoo/_release Worker for Filesystem (core of Loader)
_artifacts/files/ Filesystem scripts and configuration

Package Directories

During Image creation (also Kernel and Rootfs), large directories are packaged with XZ Compression to maximize space savings (see Design). Commands such as rc-update are run during Image creation or at boot time after directories are unpacked. There are variables sourced from the package set file which define these.

RCUPDT Commands such as rc-update to be run before Image creation
FSUPDT Identical to RCUPDT, but are run after directories are unpacked
FSPACK Included in Image, and unpacked during boot
FSKEEP Included in Image, but are left packed
FSARCH Excluded from Image, but are packed for later use
FSEXCL Excluded from Image, and are not packed at all

Note that these can be nested one level deep. Meaning, a directory can be FSARCH from a FSPACK or FSEXCL from a FSKEEP and so on. Anything nested deeper will produce undefined results. They are evaluated in reverse order, so lower on the list will take precedence. For example, if the same directory is set in FSEXCL and FSPACK, the directory will be FSEXCL. Take this into consideration when nesting, since doing things like FSPACK on a FSKEEP subdirectory will also produce undefined results.

Complete examples of usage are in gentoo/sets/gary-os and gentoo/sets/_gary-os.

Overlay Environment

The Booting process goes through three stages (see Design). In the first, Kernel loads into memory along with a Linux initramfs. This is a minimal environment designed to locate, mount and boot a Filesystem such as Rootfs. There are Linux Kernel parameters which inform this environment.

First, groot_size specifies how much memory to reserve for the filesystem. This must be large enough to contain both Kernel and Filesystem, plus a little extra for space needed after booting. Then, the groot partition is mounted and groot_file is loaded into memory. Optionally, groot_hint can be used to provide helpful information in case loading the Filesystem fails.

During this stage, Linux kernel modules are loaded from the Kernel internal Filesystem if they are needed.

In case of failure, a minimal shell environment will be loaded. It is menu-driven and self-documented. Its purpose is to facilitate real-time user selection of a Filesystem to load.

Once a Filesystem is loaded, directories are unpacked as specified in 'Package Directories' above, and /init on the target filesystem is booted. The majority of Linux kernel modules will be loaded after this point, so it is important that the Filesystem has a /usr/lib/modules directory which matches the GaryOS version. There is a packdir archive of this directory in Downloads.

The final in-memory filesystem is mounted on the backend at /.overlay, so it can be resized after boot using something like mount -o remount,size=6144m /.overlay (see Update).

If desired, the intermediary environment used to locate and boot the Filesystem can intentionally be loaded by using groot=null. This process is a great learning experience for anyone interested in the GNU/Linux boot process or how live systems work. In particular, there is a reference implementation of a completely in-memory Squashfs in _artifacts/files/initrc.

References

References to this section:

These are to make sure everything is cross-linked, and that this section is complete.


Project

The project is not named GaryOS out of any delusions of grandeur or egomania. It was coined years before its public birth by a pair of good friends who jested at the amount of time and effort spent tuning and customizing a computing environment. The author's workstation was jokingly called "Gary OS".

GaryOS as it is today is the organic evolution of that long-ago workstation into the public project it has become. It is produced directly from the same build the author uses on their personal system. In all ways, it IS Gary's OS.

That said, the name is meant to be humorously, ironically self-deprecating. GaryOS would not be possible if not for the incalculable, invaluable contributions of countless developers and enthusiasts worldwide over the course of many decades (as far back as the 1970s). It is the author's hope that this small contribution to the universe of open source software is valuable to someone other than themself.

References

GaryOS has maintained a steady stream of downloads since its debut in February 2014. It has also shown up in some notable places.

Hopefully, it will someday make these lists as well.

Snapshots of all discovered references to GaryOS are kept in _artifacts/archive/. Please contact the author at gary-os@garybgenett.net with any other acknowledgments you find. The fact that you are reading this counts.

Contributing

Contributions are welcome and will be publicly acknowledged.

Patches

To create patches there is a function in .bashrc. Submit patches to gary-os@garybgenett.net.

./.bashrc git-patch <parent commit>

The parent commit should be the last commit hash before your changes. This will create ####-* patch files for each commit since the parent. Email them as attachments. GitHub pull requests or links to commits in a forked repository also work.

Inclusivity

The author is passionate about who you are, your ideas, what you manifest, and how you carry yourself in the world. Come as you are. We are all just human beings.

Let's all just be kind to one another, so we someday won't even need documents like these.

Licensing

Starting with v4.0, GaryOS is released under the GNU GPL v3.0. It was originally released under a BSD-style license.

The FSF and GNU projects are dedicated to a completely open society based on open source computing. The GPL is a manifesto as much as it is a license.

The BSD philosophy is that BSD-style licenses are yet more permissive and foster the innovation of new technologies by allowing them to be driven by profit.

The original intent was to support the BSD philosophy. Switching to the GPL was predicated by a few factors.

  • The perspective that code is a written work of art and not a product
  • Proliferation of software patents and intellectual property enforcement
  • GaryOS is written entirely in interpreted and not compiled languages
  • It is unlikely that any proprietary software will be based on GaryOS
  • Patches are sometimes submitted to GPL projects

For further details, see the current License or the licenses for the individual Versions.

The author and contributors do not offer any warranty. You take all responsibility for your use of this software. If it breaks, you own all the pieces.


Details

This is additional information mostly pertaining to how the GaryOS project is managed. It is not necessary reading in order to use any aspect of GaryOS, and is only for the curious.

If you read this section, the author would appreciate a note at gary-os@garybgenett.net.

Versioning

Version numbers follow Semantic Versioning. The major version number increments whenever the Portage tree commit is updated. Minor version numbers increment for release updates that are on the same Portage tree.

Revisions to the GaryOS, Loader and Portage configuration will also line up with the Portage tree, since they can only be validated by doing a full build or a build update.

Repository

Here is an overview of the repository contents, in order of relative importance:

Project Files Purpose
README.md All documentation
LICENSE.md License for project and all patches
Makefile Primary interface to Builder and Loader
packages.txt Kernel packages, sizes and install information
packages.rootfs.txt Rootfs packages, sizes and install information
_commit Solely for author tracking of source repositories
Key Directories Purpose
grub/ GNU GRUB menu files (for Boot, see GRUB)
linux/ Linux Kernel configuration files
gentoo/ Portage configuration, Builder and Loader
gentoo/overlay/ Version management and fixing broken packages
scripts/ GRUB and QEMU
_artifacts/files/ Loader scripts and Image configuration files
_artifacts/patches/ GaryOS features and improvements
_artifacts/archive/ Miscellaneous stash space, including References
_artifacts/images/ Icons and screenshots
Core Files Purpose
.bashrc Scripting library (author's Bash configuration)
scripts/grub.sh GRUB backed worker script
linux/_config Simplifies Linux Kernel configuration updates
gentoo/_system Heart and soul of Builder, and GaryOS itself
gentoo/_release Heart and soul of Loader (and publish process)
gentoo/_funtoo Gentoo commit tracking
gentoo.config Example for "Edit" stage in Compile
gentoo/.emergent Audit script and information (see Builder)
gentoo/savedconfig/x11-wm/dwm Slightly modified dwm configuration
gentoo/sets/gary-os Kernel packages, Loader and Image
gentoo/sets/_gary-os Rootfs packages, Loader and Image
Other Purpose
.vimrc Keeps this handy and also published online
xclock_size_hack.patch Make gkrellaclock look like xclock

The commit history for all these components reside in more than one personal repository. They are merged together into the public GaryOS Git repository by gentoo/_release. This means that even minor merging issues or the inclusion of new files will result in a public repository that can not 'fast-forward' and will require re-cloning.

Tools

GaryOS relies on too many open source projects to count (see Project). However, there are a few primary tools and sites which are used to build and distribute GaryOS. An additional list of secondary items is in Ecosystem.

First and foremost, the projects which brought open source into the mainstream:

The backbones which do the real heavy lifting in GaryOS:

Kernel configuration, package lists and acknowledgments:

Special thanks to the sites which made worldwide distribution possible:

GitHub inspired the initial publication of this project, and SourceForge provided the distribution platform that made it possible to instantly reach an international audience.

Ecosystem

Beyond the Tools used to create and publish GaryOS, there is a small universe of projects that either provided inspiration or are used for GaryOS.

To start, homage to those who started it all:

Tomsrtbt was especially influential. GaryOS is modeled very much after Tom's project. Some familiar quotes straight from the tomsrtbt FAQ:

``` 1) tomsrtbt is "The most GNU/Linux on one floppy disk" Tomsrtbt stands for: "Tom's floppy which has a root filesystem and is also bootable."

2) Design goals as much stuff as possible on 1 floppy disk keep it self contained, build under itself try to make it behave like a normal system rescue and recovery functions get priority ```

Thank you so much, Tom.

Inspiration and core concepts were also provided by:

Projects which are relied on daily for critical tasks or highly visible components, and deserve mention:

Gratitude to all those who have contributed to making GNU/Linux the most powerful and flexible operating system on the planet, and a true "run anywhere, anyhow" computing environment.


Release

This is additional information pertaining exclusively to how GaryOS is developed, tested and released. As the author evolved an ever more formal and repeatable process, it made sense to make this part of the public documentation.

Everything needed to perform these steps is in the Repository or the Downloads folder.

Process

Personal Build

Iterate {

  • make DOFAST=true doit
    • [x] Errors()
  • make gendir
    • vi ./build/_gentoo/+checks

}

Errors {

  • make <package atom>
    • [ ] Copy "gentoo browse" link to browser
    • [ ] Copy "gitweb" link to browser
  • make overlay-<package atom|/|%>^<ebuild>^<commit>
    • mkdir ./gentoo/overlay/<package atom>
    • (cd _build/gentoo/gentoo; git-list -20 -l -- <package atom>)
    • (cd _build/gentoo/gentoo; git-list -2 -- <package atom>/<ebuild>)
    • (cd _build/gentoo/gentoo; vdiff -l -20 -- <package atom>)
  • make emerge-<package atom|/|%>

}

  • cd .setup/gentoo.make
    • (cd _builds; rm ./_gentoo.working; ln _gentoo ./_gentoo.working)
      • (cd _builds/_gentoo; rm-all; ll)
      • (cd _target/iso; vi ./.urls; ./.urls -f)
      • (cd _build/gentoo/gentoo; git pull; GIT_PAGER= git-list -n1)
      • (cd _build/gentoo/gentoo; ll ./sys-kernel/gentoo-sources)
      • (cd _build/gentoo/gentoo; ll ./sys-kernel/gentoo-kernel)
    • vi ./gentoo/_release
      • [ ] Update ${_VERSN} number
      • vi ./gentoo/_funtoo
      • vi ./gentoo/sets/*
        • versions
        • [ ] Review
      • vi ./gentoo/package.* ./gentoo/sets/*
      • (cd ./gentoo/overlay; ./.review -a)
        • [ ] Review .keep packages
      • [ ] Update ${RUFUS_VER} number
    • cd .setup/linux
      • (cd _build/gentoo/gentoo; grep -A10 SRC_URI ./sys-kernel/gentoo-kernel/gentoo-kernel-*.ebuild)
        • wget [...]
      • mv ./kernel-x86_64-fedora.config ./default-gentoo64.config-[...]
        • rm ./.default; ln default-gentoo64-[...] ./.default
        • rsync -L ./.default ./config-gentoo64-[...]
      • rsync -L ./.options ./config-gentoo64-[...]-options
        • rm ./.config; ln config-gentoo64-[...] ./.config
        • rm ./.options; ln config-gentoo64-[...]-options ./.options
      • vi ./.options
        • [ ] Update source kernel version
        • [ ] Review
  • make DOMODS=false init
    • [ ] Until @world, at least
      • while :; do make DOMODS=false DOFAST=true init; inotifywait --event modify gentoo/make.* gentoo/package.* gentoo/sets/*; done
      • (cd .setup; vi gentoo/make.* gentoo/package.* gentoo/sets/*; vdiff -g gentoo/make.* gentoo/package.* gentoo/sets/*)
    • [x] Iterate()
  • ./linux/_config ./build/usr/src/linux * rsync $(realpath ./linux/.default) ./build/usr/src/linux/.config * chroot ./build bash -c "(cd /usr/src/linux && make olddefconfig)" * rsync ./build/usr/src/linux/.config $(realpath ./linux/.default)
    • [ ] Review final version
      • vdiff $(realpath ./linux/.default) $(realpath ./linux/.config).*.DONE
      • rsync $(realpath ./linux/.config).*.DONE $(realpath ./linux/.config)
      • rm $(realpath ./linux/.config).*
  • make DOMODS=false doit
    • [ ] Update savedconfig directory
    • [x] Iterate()
  • cd .setup/gentoo.make
    • (cd .setup; git-commit ./linux ./gentoo)
  • make DOMODS=false redo
    • [x] Iterate()
    • make DOMODS=false doit
    • (cd _builds; rsync ./_gentoo/ ./_gary-os.working)
  • make DOMODS=true edit
    • (cd _builds; rm ./_gentoo.boot; ln _gentoo ./_gentoo.boot)
    • (cd _builds; rsync ./_gentoo/ ../../_toor)
    • [ ] Boot to "gary-os"
      • rsync [...]/_root/{.runit,.setup} [...]/_toor/
    • [ ] Boot to "_toor"
      • [ ] Smoke test for 2-3 weeks
      • [x] Iterate()
      • _sync _sys _clone _full _setup
    • [ ] Boot to "gary-os"
      • _sync _sys _chroot [...]
      • rsync [...]/_toor/{.runit,.setup} [...]/_root/
    • [ ] Boot to "_root"
  • make DOMODS=true doit
    • ll ./build/ ./build/_build
    • (cd .setup; git-commit ./gentoo)
    • (cd _builds; rsync ./_gentoo/ ../../_toor)
    • _sync _sys _clone _full _setup

GaryOS Build

Validate { <kernel> <check> <option> <target>

  • make ${3} doit && make ${3} DOREDO=true ${4}
    • [x] Iterate()
  • [ ] Target size of ${1} or less (make check = Total disk usage: ${2})
    • [ ] Command comments at bottom of gentoo/package.use
      • make ${3} depends-<package atom|/|%>
      • make ${3} depgraph-<package atom|/|%>
      • make ${3} belongs-<file path|/|%>
    • make ${3} DOFAST=true doit && make ${3} DOFAST=true ${4}
      • make ${3} check
      • mkdir ./mnt; mount -o loop ./build/.gary-os-*/gary-os-*.cpio.rootfs ./mnt; ncdu ./mnt; umount ./mnt; rm ./mnt
    • ll ./build/.gary-os-*
  • make ${3} gendir

}

  • cd .setup/gentoo.gary-os
    • make DOFAST=true init
    • make DOREDO=true krnl
  • [x] Validate( 850MB 1.4GiB '' devel )
    • [ ] Verify #{rootfs} markers
  • make ROOTFS=false devel
    • ./scripts/qemu-minion.bsh ./build/.gary-os-*/gary-os-*.kernel 1 -m 8192
    • [ ] Test kernel size and root filesystem resize
  • [x] Validate( 1.8GB 3.4GiB P=_gary-os rootfs )
  • (cd .setup; git-commit ./gentoo)
  • make doit && make DOREDO=true devel

Test & Publish

  • cd .setup/gentoo.gary-os
    • (cd _builds/.gary-os.release; rm ./v#.#; ln ../_gary-os.working/.gary-os-* ./v#.#)
      • vi ./gentoo/_release
        • [ ] Add ${RELEASE[*]} number, with empty ${CMTHASH[*]}
      • make DOREDO=true _release_grub
      • make _publish_release
    • (cd _builds; rm ./_gary-os.boot; ln _gary-os.working ./_gary-os.boot)
      • _sync boot
    • make DOREDO=true DOTEST=true _release_grub
  • x
  • x

Rolling Builds

Retry {

  • make DOMODS=true DOFAST=true init
  • make DOMODS=true DOFAST=true doit

}

  • cd .setup/gentoo.make
    • (cd _builds; rm ./_gentoo.boot; ln ../../_toor ./_gentoo.boot)
    • (cd _builds; rm ./_gentoo.working; ln ../../_toor ./_gentoo.working)
    • chmod -vR 755 ./gentoo/
    • vi ./gentoo/_funtoo
      • (cd _build/gentoo/gentoo; git pull; GIT_PAGER= git-list -n1)
      • [ ] Update Gentoo commit
    • make DOMODS=true DOREDO=true doit
      • [x] Retry()
    • make DOMODS=true edit

Checklist

Everything in Booting, Running and Building should be validated below.

Compile

Linux / Virtual

  • ./scripts/qemu-minion.bsh ./build/.gary-os-*/gary-os-*.kernel 1
    • [ ] Boot time
    • rc-status
      • htop
      • free; df -h; ls -la / /.overlay /.overlay/*
    • mount -o remount,size=3072m /; df -h
      • mount -o remount,size=3072m /.overlay; df -h

GRUB / Filesystem

  • ./scripts/qemu-minion.bsh ./build/.gary-os-*/gary-os-*.qcow2 1 MBR
    • [x] Menu
      • [x] Options
        • [ ] Verify "gopts=true"
        • [ ] Test each entry
      • [x] Menu -> Options
        • [ ] Verify values
      • [x] Options -> reset
        • [ ] Verify values
      • reboot
    • [x] Boot
      • [ ] Verify normal console
      • cat /proc/cmdline
        • [ ] Verify "gopts=true"
      • reboot
    • [x] Boot Rootfs
      • [x] Options -> groot=null
      • [ ] Verify rootfs menu is readable
      • cat /proc/cmdline
      • reboot
    • [x] Boot Rootfs
      • [x] Serial console on --- entry
      • [x] Options -> groot=null
      • vi /.profile /initrc
        • if true; then
      • rootfs -
        • g
        • mount; ls -la /.overlay /.overlay/.overlay; unrootfs; mount
      • rootfs = /dev/null /.gary-os; exit 0
        • <enter>
        • c; exit 0
        • l
        • <enter>
        • q
      • rootfs =; mount /dev/sda1 /.groot; exit 1
        • mount; ls -la /.groot /.groot/.groot /.groot/.overlay; unrootfs; mount
        • rm /usr/bin/mount.*; rootfs /dev/sda1
        • [ ] Verify rsync phase (may exhaust memory)
        • [ ] If it crashes, reset and restart from here
        • mount; ls -la /.overlay/.overlay; unrootfs; mount
      • dotty; exit 0
        • dottys
        • rootfs =
        • modprobe e1000; dhcpcd eth0
        • ssh -vv root@10.0.0.254
        • exit 1
        • unrootfs; mount
      • rootfs /dev/sda1
        • boot
    • rc-status
      • htop
      • free; df -h; ls -la / /.overlay /.overlay/*

EFI

  • ./scripts/qemu-minion.bsh ./build/.gary-os-*/gary-os-*.qcow2 1
    • [ ] EFI menu (using \<escape\>)
      • [x] Boot Maintenance Manager
      • [x] Boot From File
      • reboot
    • [ ] Repeat with Kernel

PXE

  • ./scripts/qemu-minion.bsh /dev/null 1
    • (cd .store; rsync -L ./gary-os/gary-os.kernel ./_rescue)
      • [ ] Verify direct boot
    • (cd .store; rsync -L ./gary-os/gary-os.grub/x86_64.efi ./_rescue)
    • vi [...]/dhcpd.conf; sv restart dhcpd tftpd
      • [ ] Uncomment root-path
      • [x] PXE
      • ls -la /.overlay
  • ./scripts/qemu-minion.bsh /dev/null 1 -m 8192
    • vi [...]/dhcpd.conf; sv restart dhcpd tftpd
      • [ ] Change root-path location
      • [ ] Uncomment extensions-path
      • [x] PXE
      • ls -la /.overlay
  • ./scripts/qemu-minion.bsh ./build/.gary-os-*/gary-os-*.qcow2 1 -m 8192
    • [x] Options
      • [x] dhcp
      • [x] pxe: groot
    • [x] PXE
  • /.setup/.setconf; sv restart dhcpd tftpd

Windows / GRUB / Virtual

  • sv stop qemu.windows
    • rm /tmp/qemu.windows.img.*
    • (cd _systems/qemu; rm windows.img)
    • (cd _systems/qemu; qemu-img create -f qcow2 -F qcow2 -o compat=1.1,backing_file=$(ls -L windows-10.*.qcow2 | tail -n1) windows.img)
  • ./scripts/qemu-windows.bsh / ALT -m 8192
    • [ ] Download Boot and Kernel to the desktop
    • [ ] Download and install VirtualBox
      • [ ] Use Desktop for new Virtual
      • [x] Task Manager, Performance
      • [ ] Verify boot
    • [ ] Install GRUB
  • ./scripts/qemu-windows.bsh / ALT BOOT -m 8192
    • [ ] Verify both "Windows" entries
      • change cdrom0 [...]/en_windows_10_*.iso
    • [x] Boot
      • reboot
    • [x] Windows
      • [ ] Run bcdedit.bat as 'Administrator'
  • ./scripts/qemu-windows.bsh / ALT -m 8192
    • [x] Windows
      • [x] GaryOS Grub (produces EFI error screen)
      • <escape>
    • [x] Boot Manager
      • [x] GaryOS Grub
      • [x] Windows
  • ./scripts/qemu-minion.bsh /dev/null 1
    • [x] Boot
  • (cd _systems/qemu; rm windows.img)
    • (cd _systems/qemu; ln windows-10.qcow2 windows.img)
    • rm /tmp/qemu.windows.img.*
    • sv restart qemu.windows

Networking / GUI

  • ./scripts/qemu-minion.bsh ./build/.gary-os-*/gary-os-*.qcow2 1
  • [ ] Boot to "gary-os"

Update / Manage / Image / Install

  • rm /tmp/qemu.gary-os-* /tmp/qemu.null.*
  • ./scripts/qemu-minion.bsh ./build/.gary-os-*/gary-os-*.qcow2 1 -m 8192
    • cd /.gary-os
      • rc-update add dhcpcd default; openrc
        • mount -o remount,size=6144m /.overlay
      • source ./.bashrc
        • shell -i
        • rsync -L --filter=-_/gentoo.git --filter=-_/sources --filter=-_/build --filter=-_/gary-os root@10.0.0.254:[...]/.setup/gentoo.gary-os/ /.gary-os
      • exit 0
    • cd /.gary-os
      • touch ./overlay
      • mkdir /tmp/grub; HOME=/.gary-os GRUB_DIR=/.gary-os/grub ./scripts/grub.sh /tmp/grub -fx -k/dev/sda1 /dev/sdb1
        • umount /dev/sdb*
        • gdisk /dev/sdb
          • [ ] Expand partition size
        • ./.bashrc format /dev/sdb1
      • make unpack
        • mount /dev/sdb1 /.install
        • mkdir /.install/gary-os
    • ls -la ./gary-os/
      • rm ./gary-os/gary-os-*.fetch
      • make fetch
        • sed -i "s|^[#]||g" ./gary-os/gary-os-*.fetch
        • for FILE in $(cat ./gary-os/gary-os-*.fetch); do rsync -L --progress root@10.0.0.254:[...]/_builds/_gary-os.working/.gary-os-*/${FILE} /.install/gary-os/; done
        • make DOTEST=true fetch
    • ls -la /.gary-os-*/
      • make DOREDO=true unpack
        • sed -i "s|^[+]|*|g" /.unpack
        • make unpack
      • emerge app-misc/hello
        • hello
      • emerge app-text/aspell
    • ls -la /.gary-os-*/
      • rm /.gary-os-*/gary-os-*.rootfs*
        • make rootfs
        • mount -o loop /.gary-os-*/gary-os-*.rootfs /mnt; ls -la /mnt; umount /mnt
    • ls -la ./sources/; ls -la ./build.install/
      • rm ./build; ln -fsv /.install ./build
      • mv ./gary-os/gary-os-*.stage3.tar.xz ./gary-os/stage3-generic_64.tar.xz
      • make init
        • [ ] Exit with \<ctrl-c> once unpacking the stage3
      • ls -la ./build/ ./build/_build
    • ls -la /.install/
      • rm ./build; ln -fsv / ./build
      • make install
        • [ ] Copy and paste GRUB instructions
        • cat /.install/etc/issue
        • ls -la /.install
        • df -h
      • make DOREDO=true install
        • cat /etc/issue
    • vi /.install/etc/inittab
      • [ ] Uncomment serial console
  • ./scripts/qemu-minion.bsh /dev/null 1
    • [ ] Verify default boot
      • hello
      • reboot
    • [x] Boot (manually from GRUB command line)
      • cd /.gary-os
      • touch ./overlay
      • mount -o remount,size=3072m /.overlay
      • mkdir /tmp/grub; HOME=/.gary-os GRUB_DIR=/.gary-os/grub ./scripts/grub.sh /tmp/grub /dev/sda1
      • reboot
    • [x] Install Menu
      • <escape>
    • [x] Install Boot
      • cd /.gary-os
      • make reset
      • vi +/#{GFG} /etc/portage/{make.conf,package.use}
      • rm /var/db/repos/gentoo
      • make update
      • make upgrade
  • rm /tmp/qemu.gary-os-* /tmp/qemu.null.*
  • ./scripts/qemu-minion.bsh ./build/.gary-os-*/gary-os-*.qcow2 1 -m 8192
  • rm /tmp/qemu.gary-os-* /tmp/qemu.null.*

Publish

Review

  • cd coding/gary-os
  • vi ./README.md
    • , Rootfs and Boot links
    • list in Header
    • section and release notes
      • for FILE in coding/gary-os .setup .static; do [...]
      • if [ ${FILE} == coding/gary-os ]; then LIST=""; fi
      • if [ ${FILE} == .setup ]; then LIST="grub linux gentoo"; fi
      • if [ ${FILE} == .static ]; then LIST=".bashrc .vimrc scripts/grub.sh scripts/qemu*"; fi
      • (cd ${FILE}; vdiff -g $(sed -n "s|^$(basename ${FILE}): ||gp" [...]/_builds/_gary-os/_commit) ${LIST})
    • [ ] Screenshots
      • (cd .setup/gentoo.gary-os; ./scripts/qemu-minion.bsh ./build/.gary-os-*/gary-os-*.qcow2 1)
        • [x] Peek
      • wmctrl -i -r 0x00000000 -e 0,0,0,800,600
        • vi ~/.Xresources -> URxvt.background: rgb:00/00/00
        • ctrl-a s, crtl-a F
        • [x] Gimp -> File -> Create -> Screenshot
      • remote-viewer
      • (file *; exiv2 *; identify -verbose *) | less
  • make TOKN=[...] readme-github
    • make DOTEST=true readme
    • make readme-all
      • pages ./GaryOS-Readme.html
    • aspell -c ./README.md
      • rm ./README.md.bak
  • make readme-clean

Commit

Verify {

  • cat ./build/etc/issue ./build/etc/motd ./build/_commit
  • for FILE in coding/gary-os .setup .static; do (cd ${FILE}; GIT_PAGER= git-list -n1 2>/dev/null); done
    • (cd ./build/.gary-os; GIT_PAGER= git-list -n1)
  • ./scripts/qemu-minion.bsh [...]
    • cd /.gary-os; GIT_PAGER= git log -n1; git status
    • GIT_PAGER= git diff
    • startx

}

  • cd .setup/gentoo.gary-os
    • (cd _builds/.gary-os.release; rm ./v#.#)
    • make clean
    • ll ./build/ ./build/_build
  • (cd .setup; vi gentoo/_release; git-commit -m "Incremented version number." gentoo/_release)
    • [ ] Commit ${_VERSN} number
  • (cd coding/gary-os; git-commit -m "Stamped v#.# release." ./README.md)
    • make _publish_gitdir
    • (cd _builds/.gary-os/.gary-os; GIT_PAGER= git-list -n1)
  • make doit && make DOREDO=true release _prepare_packdirs
    • (cd _builds; rsync ./_gentoo/var/cache/{distfiles,binpkgs} ./_gary-os.working/var/cache/)
    • ./scripts/qemu-minion.bsh ./build/.gary-os-*/gary-os-*.kernel 1
    • [x] Verify()
  • make P=_gary-os doit && make P=_gary-os DOREDO=true rootfs
    • _sync boot
    • ./scripts/qemu-minion.bsh ./build/.gary-os-*/gary-os-*.kernel 1 "groot=10.0.0.254 groot_size=6144m" -m 8192
    • [x] Verify()
  • make DOREDO=true _publish_release
    • ll ./build/ ./build/_build ./build/.gary-os-*
  • (cd _builds; rsync -L ./_gary-os.working/.gary-os-*/ ./_gary-os)
    • (cd _builds/_gary-os; git-backup <gentoo commit>.#; GIT_PAGER= git-list -n1)
  • (cd .setup; vi gentoo/_release; git-commit -m "Published v#.# release." gentoo/_release)
    • [ ] Commit ${RELEASE[*]} number
  • make _publish_gitdir
    • (cd _builds/.gary-os/.gary-os; GIT_PAGER= git-list -n3)
    • (cd _builds/.gary-os/.gary-os; GIT_PAGER= git tag -l)
    • ./.validate

Upload

Personal

  • (cd _builds; rm ./_gary-os.boot; ln _gary-os ./_gary-os.boot)
    • _sync boot
  • cd .setup/gentoo.make
    • make DOMODS=true doit
    • make DOMODS=true edit
    • (cd _builds/_gentoo; git-backup "gary-os v#.#"; GIT_PAGER= git-list -n1)
    • (cd _builds; rsync ./_gentoo/ ../../_toor)
  • cd coding/gary-os-history
    • ln ../gary-os.git ./.git
    • GIT_PAGER= git-list -n1
    • git checkout README.md
    • rm ./.git

Celebrate


Versions

v9.0 2025-09-08

Repository / Readme / License / Packages (Kernel) / Packages (Rootfs)

Kernel gary-os-v9.0-generic_64.kernel
Rootfs gary-os-v9.0-generic_64.rootfs
Boot gary-os-v9.0-generic_64.grub.zip
Disk gary-os-v9.0-generic_64.qcow2
Source Stage3 gary-os-v9.0-generic_64.stage3.tar.xz
Source Portage gary-os-v9.0-generic_64.gentoo-repo.tar.xz
  • Overall
    • Increased default initramfs size to 3072m for Kernel packages growth
    • Integrated tmpfs into build process, to optimize speed and disk usage
    • General improvements to build/update process
    • Renamed "artifacts" directory
  • Portage
    • Improved support for post-installation rolling builds/updates
    • Added an option for additional package overlays
  • GRUB
    • Increased Boot groot_size to 4096m for Rootfs packages growth

v8.0 2024-05-16

Repository / Readme / License / Packages (Kernel) / Packages (Rootfs)

Kernel gary-os-v8.0-generic_64.kernel
Rootfs gary-os-v8.0-generic_64.rootfs
Boot gary-os-v8.0-generic_64.grub.zip
Disk gary-os-v8.0-generic_64.qcow2
Source Stage3 gary-os-v8.0-generic_64.stage3.tar.xz
Source Portage gary-os-v8.0-generic_64.gentoo-repo.tar.xz
  • Overall
    • Upstream filesystem consolidation into /usr directory
    • Improvements to Loader, and better compression of package directories
    • Improvements to Builder, Rootfs, and release processes
    • Removed build dependency packages from Kernel, for size
    • Formally incorporated rolling build updates
    • Separated Disk file from Boot archive
    • Retired Tiny kernel!
  • Portage
    • Updated and centralized emerge command-line options
    • Ongoing refinements of $USE variables for Kernel build
    • Upgraded Linux Kernel to 6.x version
    • Customized Busybox configuration
  • GRUB
    • Fixes for upstream changes

v7.0 2023-01-14

Repository / Readme / License / Packages (Kernel) / Packages (Tiny) / Packages (Rootfs)

Kernel gary-os-v7.0-generic_64.kernel
Kernel (Tiny) gary-os-v7.0-generic_64.tiny.kernel
Rootfs gary-os-v7.0-generic_64.rootfs
Boot gary-os-v7.0-generic_64.grub.zip
Source Stage3 gary-os-v7.0-generic_64.stage3.tar.xz
Source Portage gary-os-v7.0-generic_64.gentoo-repo.tar.xz
  • Overall
  • Portage
    • Upgraded to new GPKG binary package format
    • Finally consolidated to single version of Python, and eliminated Ruby
    • Created closer tracking of $USE variables for Kernel build
    • Minimized proprietary firmware and binary packages
    • Minor changes to package lists
  • GRUB
    • Latest development version of GNU GRUB (see grub rationale file)
    • At last, fixed the need for Tiny with upstream patch!
    • Switched to sfdisk for partitioning
    • Upgraded to new version of Rufus

v6.0 2021-09-12

Repository / Readme / License / Packages (Kernel) / Packages (Tiny) / Packages (Rootfs)

Kernel gary-os-v6.0-generic_64.kernel
Kernel (Tiny) gary-os-v6.0-generic_64.tiny.kernel
Rootfs gary-os-v6.0-generic_64.rootfs
Boot gary-os-v6.0-generic_64.grub.zip
Source Stage3 gary-os-v6.0-generic_64.stage3.tar.xz
Source Portage gary-os-v6.0-generic_64.meta-repo.tar.xz
  • Overall
    • Completely up-to-date Funtoo commit!
    • Linux Kernel configuration now from Debian Kernel
    • Streamlined Builder process
    • More comprehensive FS* variable defaults
    • Improved "rootfs" overlay process and menu system in Kernel
    • Added Tiny kernel build
    • Color-branded dwm
  • Portage
    • Promoted "FUNTOO" variable
    • Tightened up gentoo/sets/ package lists
    • Consolidated and condensed Python versions
    • Eliminated Systemd, Surf, WebKit, SpiderMonkey, Ruby and CUPS
    • Quieter, prettier and easier to read gentoo/_system output
    • Improved gentoo/overlay/ management
    • Enhanced gentoo/.emergent output
  • GRUB
    • Extracted menus from script to grub/ directory
    • Added options menu
    • Enhanced Windows support, including USB install partitions
    • Enabled block devices for mount options
    • Updated MBR modules list
    • Improved debugging, including custom tracing output
    • Better usage and error output
    • Cleaned up Boot archive

v5.0 2021-08-04

Repository / Readme / License / Packages (Kernel) / Packages (Rootfs)

Kernel gary-os-v5.0-generic_64.kernel
Rootfs gary-os-v5.0-generic_64.rootfs
Boot gary-os-v5.0-generic_64.grub.zip
Source Stage3 stage3-generic_64-1.4-release-std-2019-10-28.tar.xz
Source Portage gary-os-v5.0-generic_64.meta-repo.tar.xz

v4.0 2021-07-26

Repository / Readme / License / Packages (Kernel) / Packages (Rootfs)

Kernel gary-os-v4.0-generic_64.kernel
Rootfs gary-os-v4.0-generic_64.rootfs
Boot gary-os-v4.0-generic_64.grub.zip
Source Stage3 stage3-generic_64-funtoo-current-2018-09-30.tar.xz
Source Portage gary-os-v4.0-generic_64.meta-repo.tar.xz

v3.0 2015-03-16

Repository / Readme / License / Packages (64-bit) / Packages (32-bit)

Kernel gary-os-v3.0-generic_64.kernel
Kernel (32-bit) gary-os-v3.0-generic_32.kernel
Boot grub.sh
Source Stage3 stage3-core2_64-funtoo-stable-2015-01-27.tar.xz
Source Portage portage-21811b59a8484b2a6b73e0c5277f23c50a0141dc.0.tar.xz
  • Metro
    • Integration of upstream Metro changes
  • Portage
    • Improvements to audit and review scripting
    • Helper packages for Networking and basic X.Org scripting
    • Additional input drivers
  • scripts/grub.sh
    • Updated GNU GRUB modules and script options
  • Release checklist

v2.0 2014-06-19

Repository / Readme / License / Packages (64-bit) / Packages (32-bit)

Kernel gary-os-v2.0-generic_64.kernel
Kernel (32-bit) gary-os-v2.0-generic_32.kernel
Boot grub.sh
Source Stage3 stage3-core2_64-funtoo-stable-2014-01-13.tar.xz
Source Portage portage-873ca4a3a4e6ff41e510dbcf2e0fe549fb23474d.0.tar.xz
  • Metro
    • Added package lists
    • Customization of LDFLAGS and $USE variables
    • Debug option and better error handling
  • Portage
    • Complete review and rewrite of $USE flags
    • Cleaned up gentoo/overlay/ directory
    • Improvements to audit and review scripting
    • Revised package list
  • scripts/grub.sh
    • Improved naming of output files
  • Git repository in root filesystem

v1.1 2014-03-13

Repository / Readme / License

Kernel gary-os-v1.1-generic_64.kernel
Kernel (32-bit) gary-os-v1.1-generic_32.kernel
Boot grub.sh
Source Stage3 stage3-core2_64-funtoo-stable-2014-01-13.tar.xz
Source Portage portage-95ad4fd257697618bae7402d4bc3a27499035d30.4.tar.xz

v1.0 2014-02-28

Repository / Readme

Kernel gary-os-v1.0-generic_64.kernel
Kernel (32-bit) gary-os-v1.0-generic_32.kernel
Source Stage3 stage3-core2_64-funtoo-stable-2014-01-13.tar.xz
Source Portage portage-95ad4fd257697618bae7402d4bc3a27499035d30.3.tar.xz
  • Metro
    • Full support for both 64-bit and 32-bit builds
    • Switched to generic for all builds
    • GCC flag tuning
  • Portage
    • Minor package list comments
  • Made changes for Linux initramfs to be a viable stage3
  • Added release process

v0.3 2014-02-24

Repository

Kernel gary-os-v0.3-core2_64.kernel
Source Stage3 stage3-core2_64-funtoo-stable-2014-01-13.tar.xz
Source Portage portage-95ad4fd257697618bae7402d4bc3a27499035d30.2.tar.xz
  • Metro
    • Consolidated Linux Kernel and initrd into a single Linux initramfs
    • Reduced initramfs size to below 500MB Linux kernel limit
    • Updated stage3 with support for testing builds and fixing breaks
  • Portage
    • Initial support for both 64-bit and 32-bit builds
    • Tuned package list and $USE flags for size

v0.2 2014-02-13

Repository

Kernel gary-os-v0.2-core2_64.kernel
Initrd gary-os-v0.2-core2_64.initrd
Source Stage3 stage3-core2_64-funtoo-stable-2014-01-13.tar.xz
Source Portage portage-95ad4fd257697618bae7402d4bc3a27499035d30.1.tar.xz

v0.1 2014-02-09

Repository

Kernel gary-os-v0.1-core2_64.kernel
Initrd gary-os-v0.1-core2_64.initrd
Source Stage3 stage3-core2_64-funtoo-stable-2014-01-13.tar.xz
Source Portage portage-95ad4fd257697618bae7402d4bc3a27499035d30.0.tar.xz
  • Metro
    • Initial proof of concept, with separate Linux Kernel and initrd files
  • Portage
    • Active personal configuration at time of build

End Of File

Source: README.md, updated 2025-09-19