Skip to content

Instantly share code, notes, and snippets.

@LadyNamedLaura
Created August 25, 2011 14:45
Show Gist options
  • Save LadyNamedLaura/1170823 to your computer and use it in GitHub Desktop.
Save LadyNamedLaura/1170823 to your computer and use it in GitHub Desktop.
Idea for a Linux distibution
I have been thinking a lot about making my own custom Linux distribution
(current working name is "BurgieOS" but this is just because of lack of inspiration)
BASICS
- User and admin focused
- Focus on
- Use new techniques (systemd, btrfs, ...)
- cut the (legacy) crap (compat layers are available in separate packages)
- Dare to be different (in a way it still works)
- Easy usable for both for large network installations as for local desktop/laptop use
(means a decent level of flexibility)
- Fast! (both at boot up and while running)
IDEAS TO ACHIEVE THIS
- initramfs = root
This means that we do not nuke and overmount the initramfs, instead
all other trees are mounted onto it.
This way we can optimize boot process by eliminating things that get done
twice (detecting HW etc.)
Moving essential stuff/binaries into initramfs will work as a kind of
readahead (once the initramfs is loaded most things are available from ram
Initramfs and boot partition work as a kind of recovery system
No more shell in the initrd, we launch systemd from the begining
- clean up root tree
to make the system easier to understand by non-techies and new users,
we could try to clean up the root of the file-system
(this breaks FHS unless the compat layers/symlinks are installed)
move /root to /home/root
since /root is the home directory for the root user,
why not move it to /home
create /kernel hierarchy
this hierarchy will contain most kernel filesystems(except for /dev maybe)
there should also be a symbolic link /kernel/modules to
/lib/modules/´uname -r´ (or since only the modules for the current kernel
are loaded into the initramfs put them inside this directory)
mount sysfs, proc, securityfs, debugfs, selinuxfs, binfmt_misc into /kernel
This is just an example of some filesystems that should be moved into the
/kernel hierarchy
(there could also be a place for the cgroup hierarchy at /kernel/cgroup)
Eventually i like the filesystem to look like this: ( ->> means mountpoint )
/
|-- bin
|-- boot ->> boot partition (since grub cant boot from btrfs,
| otherwise "boot" subvolume on btrfs partition)
|-- dev ->> devtmpfs
|-- etc ->> partialy on initramfs, gets overmounted by "config" subvolume
|-- home
| |-- 'user' ->> "home/'user'" subvolume (or netfs), gets mounted on login
| | unmounted on logout
| |-- public ->> "home/public" subvolume, public data, for nfs export etc.
| | `-- 'user' (public data of 'user', chmod 755)
| `-- root ->> "home/root" subvolume
|-- kernel
| |-- binfmt_misc ->> binfmt_misc
| |-- cgroup ->> tmpfs
| |-- debug ->> debugfs
| |-- modules
| |-- proc ->> proc
| |-- security ->> securityfs
| |-- selinux ->> selinuxfs
| `-- sys ->> sysfs
|-- lib
|-- media
|-- run ->> tmpfs
|-- sbin
|-- tmp ->> "temp" subvolume or tmpfs
|-- usr ->> "usr" subvolume or netfs
`-- var ->> "var" subvolume
/opt and /srv are supported but not used by default
(activate them trough some kind of system control utility)
we went from 19 to 13 directories in / by default! no more pollution!!
(this is not finished, there are still directories i want gone somehow)
- keep all packages inside /usr
the package-manager and mkinitramfs should take care of the rest.
for remote /usr there will be a file /usr/initramfs.stamp with a timestamp
of the last update affecting the initramfs, if it is found tat this is
later than the creation date of the initramfs, the initramfs is rebuild.
- save default config files in /usr/etc
software should auto detect whether a /etc version is available
and give that one priority
(like systemd does with /lib/systemd and /etc/systemd)
- use configuration files as mentioned by Lennart at:
http://0pointer.de/blog/projects/the-new-configuration-files.html
http://0pointer.de/blog/projects/on-etc-sysinit.html
- updates happen on a snapshot of /usr which then replaces the real /usr,
the old ones are kept a bit afterward to serve as a backup
(something like "last working state")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment