Name | Modified | Size | Downloads / 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:
- Booting
- Parameter --
groot_size
- Parameter --
- Filesystem
- Parameters --
groot_size
,groot
,groot_file
andgroot_hint
- Parameters --
- Image
- Symbolic link --
/init
- Loader directories and
rc-update
- Symbolic link --
- Design
- Linux Kernel parameters
- Repository
- Heart and soul -- gentoo/_release
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.
- Gentoo ecosystem (2018-08)
- List of non-systemd distributions (proudly)
- Softpedia review of v3.0 (not just a paste of the README.md text)
Hopefully, it will someday make these lists as well.
- Wikipedia Gentoo derived distributions (it was, before the page re-write)
- DistroWatch
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.
- Social Protection & Human Rights Equality and Non-discrimination
- Contributor Covenant Code of Conduct
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.
- Versioning scheme
- Repository overview
- Primary Tools used
- The overall Ecosystem GaryOS lives in
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:
- FSF & GNU (GNU's Not Unix)
- Linux Foundation & Linux Kernel
- GNU/Linux
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 (floppy disk!)
- KNOPPIX
- Debian Live
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
- [ ] Update Gentoo commit
vi ./gentoo/sets/*
vi ./gentoo/package.* ./gentoo/sets/*
- [ ] Command comments at top of gentoo/package.use
(cd ./gentoo/overlay; ./.review -a)
- [ ] Review
.keep
packages
- [ ] Review
- [ ] Update
${RUFUS_VER}
number
- [ ] Update
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 leastwhile :; 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()
- [ ] Until
./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).*
- [ ] Review final version
make DOMODS=false doit
- [ ] Update
savedconfig
directory - [x] Iterate()
- [ ] Update
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-*
- [ ] Command comments at bottom of gentoo/package.use
make
${3}
gendir
- [ ] Command comments at bottom of gentoo/make.conf
vi ./build/_gentoo/+checks
}
cd .setup/gentoo.gary-os
make DOFAST=true init
make DOREDO=true krnl
- [x] Validate( 850MB 1.4GiB '' devel )
- [ ] Verify
#{rootfs}
markers
- [ ] Verify
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[*]}
- [ ] Add
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.
- (Completed in Process)
./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
./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] Options
- [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] Options ->
- [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
- [x] Serial console on
rc-status
htop
free; df -h; ls -la / /.overlay /.overlay/*
- [x] Menu
./scripts/qemu-minion.bsh ./build/.gary-os-*/gary-os-*.qcow2 1
- [ ] EFI menu (using
\<escape\>
) - [ ] Repeat with Kernel
- [ ] EFI menu (using
./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
- [ ] Uncomment
./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
- [ ] Change
./scripts/qemu-minion.bsh ./build/.gary-os-*/gary-os-*.qcow2 1 -m 8192
- [x] Options
- [x]
dhcp
- [x]
pxe: groot
- [x]
- [x] PXE
- [x] Options
/.setup/.setconf; sv restart dhcpd tftpd
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
- [ ] Use
- [ ] 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'
- [ ] Run
- [ ] Verify both "Windows" entries
./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
- [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
./scripts/qemu-minion.bsh ./build/.gary-os-*/gary-os-*.qcow2 1
- [ ] Ethernet Networking
- [ ] Boot to "gary-os"
- [ ] Wireless Networking
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
- note: should not be necessary, but resolves:
grub-bios-setup: error: failed to get canonical path of 'overlay'.
- https://unix.stackexchange.com/a/429434
- note: should not be necessary, but resolves:
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
- [ ] Verify from SourceForge package
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
- [ ] Exit with \<ctrl-c> once unpacking the
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
- [ ] Verify default boot
rm /tmp/qemu.gary-os-* /tmp/qemu.null.*
./scripts/qemu-minion.bsh ./build/.gary-os-*/gary-os-*.qcow2 1 -m 8192
- [x] Boot Rootfs
- [ ] Command comments in gentoo/sets/_gary-os
- [x] Boot Rootfs
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
startx
xrandr -s 1024x768
- [x] Links -> http://10.0.0.254:6419/#welcome-to-gary-os
- [x] File -> Screenshot
(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
- [ ] Commit
(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
- [ ] Commit
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
make _publish_export
(cd _builds/.gary-os.release; ll ./ ./v#.#)
make _publish_release
- https://sourceforge.net/projects/gary-os
- [ ] Verify page information
- [ ] Verify directory contents
- [ ] Update download button
- https://github.com/garybgenett/gary-os
- [ ] Test v#.# links
cd writing/garybgenett
make -C projects && make site-force && make export-all
git-save
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
cd coding/gary-os
make TOKN=[...] DOMODS=true DOREDO=true readme-github
make TOKN=[...] DOMODS=true readme-github
- https://github.com/garybgenett/gary-os/graphs/traffic
- x
- [ ] Downloads_2014-02_to_XXXX-XX.csv
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
- Increased default initramfs size to
- Portage
- Improved support for post-installation rolling builds/updates
- Added an option for additional package overlays
- GRUB
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!
- Upstream filesystem consolidation into
- 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
- Updated and centralized
- 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
- Switched to Gentoo proper, for better stability and support
- Linux Kernel configuration now from Gentoo Kernel
- Enhancements and optimizations to Builder and the Compile process
- Replaced
shmem_size
withgroot_size
for Rootfs process - Minimized Loader packages list
- 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
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 |
- Overall
- Unification of personal and public builds!
- Formalized development process and release checklist
- Improved Linux initramfs overlay in Kernel
- Included Ego configuration into gentoo/sets/
- Additional development helpers in Makefile
- Achieved pure 64-bit
- Portage
- Improved meta-repo tool in gentoo/_funtoo.kits
- Overhauled gentoo/sets/ and gentoo/overlay/
- Streamlined gentoo/overlay/ management
- Complete debug stripping of packages
- Tightened up gentoo/sets/ lists
- Ongoing Python management
- Added ZFS support
- GRUB
- Minor improvements and fixes
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 |
- Put out a new release!
- Complete overhaul of entire system
- Removed 32-bit support
- Portage and Linux Kernel configurations
- Package lists and gentoo/overlay/
- Replaced Metro with Builder
- Created Loader for external Filesystem support
- Feature-rich GNU GRUB package in Boot file
- Rewrote README.md and switched LICENSE.md to GNU GPL v3.0
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
- Complete review and rewrite of
- 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 |
- Metro
- Added Linux Kernel configuration from Grml
- Formatting and Syntax
- Portage
- Minor package changes
- scripts/grub.sh
- Created GNU GRUB script
v1.0 2014-02-28
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
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
- Consolidated Linux Kernel and
- Portage
- Initial support for both 64-bit and 32-bit builds
- Tuned package list and
$USE
flags for size
v0.2 2014-02-13
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 |
- Metro
- Added revision handling
- Portage
- Added packages from Grml and SystemRescue lists
- Enabled gpm
v0.1 2014-02-09
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
- Initial proof of concept, with separate Linux Kernel and
- Portage
- Active personal configuration at time of build
End Of File