Please fork this repo and create your own variations as you see fit. The profiles included by default, though fully functional, are reference implementations only with highly opinionated designs for my personal use cases. If you find the reference deployments useful note that any PRs, though welcome, will be evaluated in that context and will need to align with my goals.
The pre-built cyberlinux-*
packages available in the cyberlinux-aur
are highly opinionated and in some cases will modify system configuration with cyberlinux defaults
and as such they are only recommended to be installed with new systems or to
upgrade existing cyberlinux based systems and are not to be used directly on pre-existing non-cyberlinux systems.
cyberlinux comes with absolutely no guarantees or support of any kind. It is to be used at your own risk. Any damages, issues, losses or problems caused by the use of cyberlinux are strictly the responsiblity of the user and not the developer/creator of cyberlinux.
- Help
- Getting started
- Deploy cyberlinux
- Advanced concepts
- Background
- Contributions
- Licenses
- Backlog
- Testlog
- Changelog
The multiboot ISO is built almost entirely in a docker container with data cached on the local host for quicker rebuilds. This makes it possible to build on systmes with a minimal dependencies. All that is required is passwordless sudo, jq, and docker. Optionally use Virtualbox or another hypervisor solution to test out the resulting ISO/USB.
- Passwordless sudo access is required for automation:
$ sudo bash -c "echo '$USER ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/10-passwordless"
- Install dependencies:
$ sudo pacman -S jq docker virtualbox virtualbox-host-modules-arch $ sudo usermod -aG disk,docker,vboxusers $USER $ sudo systemctl enable docker $ sudo systemctl start docker
- Add your user to the appropriate groups:
$ sudo usermod -aG disk,docker,vboxusers $USER
- Passwordless sudo access is required for automation:
$ sudo bash -c "echo 'YOUR_USER ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/10-passwordless"
- Install dependencies:
$ sudo apt update $ sudo apt install jq docker virtualbox
- Add your user to the appropriate groups:
$ sudo usermod -aG disk,docker,vboxusers $USER
First ensure you satisfy the Prerequisites
- Clone the repo:
$ cd ~/Projects $ git clone git@github.com:phR0ze/cyberlinux
- Execute the build:
$ ./build.sh -p xfce -a
- Determine the correct USB device
$ lsblk
- Optionally wipe your USB first
$ sudo wipefs --all --force /dev/sdd
- Copy to the dev leaving off the partition
$ sudo dd bs=4M if=temp/output/cyberlinux-0.1.62-xfce.iso of=/dev/sdd status=progress conv=fsync oflag=direct
- Determine which device is your USB
$ lsblk
- Create a raw vmdk boot stub from the USB
$ sudo vboxmanage convertfromraw /dev/sdd usb.vmdk --format vmdk # Change ownership of new image to your user $ sudo chown $USER: usb.vmdk # Add your user to the disk group then # Logout and back in and launch virtualbox $ sudo usermod -a -G disk $USER
- Create a new VM in VirtualBox then after
- Ensure your VM is not using
EFI
- Click
Settings
then chooseStorage1
- Under
Storage Devices
click theAdds hard disk
button to theController: IDE
- Browse to and select the
usb.vmdk
you just created - Start up the new VM
- Ensure your VM is not using
For the most part deploying cyberlinux is as simple as:
- Booting from the USB or ISO you created in the Create multiboot USB section
- Selecting your desired deployment configuration
- Walking through the simple installer wizard
- Waiting for the install to complet
- Removing the USB
- Rebooting
Note: QEMU use disk named vda
- Create new virtual disk
$ qemu-img create -f qcow2 arch1.qcow2 20G
- Install ISO to new virtual disk
$ qemu-system-x86_64 \ -enable-kvm \ -m 4G \ -nic user,model=virtio \ -drive file=arch1.qcow2,media=disk,if=virtio \ -cdrom cyberlinux-0.1.62-xfce.iso
The pre-built cyberlinux-*
packages available in the cyberlinux-repo
are highly opinionated and in some cases will modify system configuration with cyberlinux defaults
and as such they are only recommended to be installed with new systems or to
upgrade existing cyberlinux based systems and are
not to be used directly on pre-existing non-cyberlinux systems.
- Install desired end state package e.g.
$ sudo pacman -S cyberlinux-xfce-theater
- Update user configuration: WARNING this is destructive. Please backup your configs first
$ mv -rf ~/.config ~/Downloads $ mv -rf ~/.local ~/Downloads $ shopt -s dotglob $ cp -r /etc/skel/* ~/ $ sudo reboot
cyberlinux is an evolution of an idea come to fruition. The origin was the need for an automated installer that would be able to install a completely pre-configured and ready to use system customized for a handful of common use cases (e.g. desktop, theater, server...) in an offline environment. As time passed the need for simpler maintainability and access to larger more up-to-date software repositories drove the search for the ideal Linux distribution.
Ubuntu Online Install
In the beginning I would deploy a super lightweight Ubuntu server system and then launch a custom
python script that would automate installing all packages and configuration settings I desired on
the new system. This unfortunately required an internet connection and that my package sources,
many of which were outside Ubuntu's repositories, persist at the same location over an extended
period of time. This method was slow, and fraught with network failures and missing online
packages as maintainers came and went.
CentOS Offline Install
My next attempt was to use CentOS and Kickstart to develop an ISO with all the packages stored on
an ISO. This solved my offline issues and gave a consistent versioning for packages, but still
took a long time to install and didn't allow for much in the way of pre-build or post install
configuration. The crux of CentOS's issues was that it is notoriously behind the times and packages
are difficult to find or simply don't exist. Additionally building newer packages on the old CentOS
tool chains proved difficult and impossible in some cases where they required newer dependencies.
Manjaro Offline Install
About this time I started looking for a distribution that provided modern packages and tooling and
found Arch. Being intimidated by Arch's install process though, I moved on to Manjaro as the next
best thing and fell in love with manjaroiso and Thus as the means to develop my own
offline ISO with pre/post install configuration changes. This seemed to solve most of my problems.
I now had offline install capabilities, latest versioned packages available and the ability to make
some small pre/post install changes. However it didn't allow for custom applications for different
deployment options without heroic effort. As time passed I found I was making more and more changes
to Thus, the installer, and other installation aspects other than what was allowed for with
Manjaro's current tool set at the time. I soon realized that I had evolved my use of Manjaro so far
beyond its original purpose that consuming updates from upstream Manjaro and other tasks were
becoming complicated and tedious. Additionally I was more and more envious of pure Arch Linux and
the goodness that was available by staying close to the source and began looking at Arch Linux
directly.
Arch Offline Install
I really like Manjaro as per above and it took me far down the road I wanted to go. I began to
discover however that the parent distro, Arch Linux, had far greater market acceptance and thus more
community repositories and more pre-built AUR packages. I quickly found that the custom AUFS kernel
and different processes that Manjaro was using meant I couldn't leverage the greater Arch Linux
community packages easily. At this point I realized that I'd already moved far beyond the original
issue I had with Arch of no installer and so it was a natural progression to switch my distribution
from Manjaro to be based directly on Arch Linux. This made BlackArch and Antergos repos directly
available and put me in a bigger support community with newer updates and packages.
Arch Linux kills! I've never used a distribution as transparent, clean and documented to use as Arch. The packages are plentiful, up-to-date and easily managed. The community is huge and active, providing almost every package known to man in the Arch User Repository or you can easily build your own packages with little effort. The kernel and tooling is modern, maintenance is easy and rolling updates make for a system that can be used forever with little effort. Best of all though is that the Arch Install process provides simple building blocks that lend themselves easily to custom filesystem creations that in turn is readily turned into ISOs and other install media. Because of the large community and plethera of distros based off Arch there are many ideas to leverage such as the following:
BlackArch - https://blackarch.org
BlackArch is a penetration testing distro based directly off Arch and is 100% compatible with Arch.
One of the main reasons I'm moving off Manjaro to pure Arch is to get access to BlackArch's
repository of penetration testing tools.
Manjaro - http://manjaro.org/get-manjaro
Manjaro is an Arch split-off distro which used to have a really nice OpenBox deployment that suited
my needs quite well. They have since dropped the OpenBox deployment but their distribution is still
one of the best distros out there and have a great community which adds to Arch's appeal with a
little adaptation. The main draw back with Manjaro is that that it can't leverage the Arch repos as
is due to their differences.
ArchBang - http://bbs.archbang.org
ArchBang caught my eye because they are devoted to using lite components like OpenBox, LXTerminal,
VolumeIcon, LXAppearance, etc... They have a great community and a lot of good ideas and
configuration for keeping your system lite.
Antergos - http://antergos.com
Antergos is based on Arch and 100% compatible but also has a few developments of its own, like its
slick custom isolinux boot and installer. They also offer a number of prebuilt AUR packages in
their custom repos.
I boiled down my requirements for cyberlinux as follows:
- Single configuration file (i.e. profile) to drive ISO creation
- ISO must include all packages, config etc... (i.e. works offline)
- Boot splash screen shown with multi-deployment options
- Fast, simple automated installs with abosolute minimal initial user input
- Fully pre-configured user environments to avoid post-install changes
- Live boot option for maintenance, rescue and secure work
- Hardware boot and diagnostics options e.g. RAM validation
- As light as possible while still offering an elegant solution
Pull requests are always welcome. However understand that they will be evaluated purely on whether or not the change fits with my goals/ideals for the project.
Enable the githooks to have automatic version increments
cd ~/Projects/cyberlinux
git config core.hooksPath .githooks
Because of the nature of cyberlinux any licensing will be of a mixed nature. In some cases as called out below such as build.sh and the installer/installer, created by phR0ze, the license is MIT. In other cases works I leveraged from else where using licenses such as GPLv2.
All art work used in the distribution have been carefully selected to be either creative commons, public domain, have permission from the original authors, or lay claim on fair use licensing. If for some reason a licensing mistake has been made please let me know and I'll review the claim immediately.
All scripting and code created for the cyberlinux project is licensed below via MIT.
-
Write Rust version of pdfmod
-
Configure rust analyzer to not show types
-
Use
Gnome Disks
i.e.sudo pacman -S gnome-disk-utility
-
Super + plus
to resize window to custom size -
Super + Enter
to position in the center -
Tool to merge skel configs
- skip
~/.local/share/gem
- skip
-
Inject system wide configuration change via strategic edits rather than file replaces
- This would aleviate loosing custom changes in files such as
/etc/pacman.conf
and/etc/lxdm/lxdm.conf
- This would aleviate loosing custom changes in files such as
- clu to sync wallpaper
/etc/lxdm/lxdm.conf
/usr/bin/lockscreen
~/.conf/xfce4/xfconf/.../xfce4-desktop.xml
- GTK folder sort settings didn't take
- ACEPC
- Vulkan support
sudo pacman -S vulkan-intel vulkan-tools
vulkaninfo
if you get info about your graphics card its working
- Vulkan support
- Add conflicts to PKGBUILD
- Replace powerline with powerline-go or powerline-rs
- clu - cyberlinux automation
- replace conky scripts, cal.rb, date.rb and radio.rb
- build in skel copy for updates
- Add cyberlinux-repo README about packages and warnings and how to configure
- Automate updates to the readme when updating the packages