Friday, May 13, 2011

Plistic GNU/Linux Journal

Well, I built a crappy computer that has a big hard-drive (1.5TB). The video on it sucks (it can’t do much), so I figure I can use it for building a GNU/Linux distribution. I toyed with the idea about a year ago and I actually made a live system on a USB-drive. All you could do was login and browse around the directory structure, but it was a start. I used Busy Box for the basis of the system.

I want to build a better system that I can actually call a distribution. The reason behind all of this is that I am not satisfied with any of the “Linux Distros” out there. Non of them do everything “right”. They all have strengths and weaknesses. The biggest weakness that I find with distributions that I like is that they install all sorts of programs on the system. So, when I install a distro, the first thing I do is spend an hour hunting down packages to remove. It’s time-consuming and annoying.

I know that building a distribution is a big job. It took me a long time just to figure out how to make a simplistic Busy Box based system to boot and operate properly. However, if I can figure out how to do this, I think it will be well worth it. This distribution isn’t going to be much and it probably will never see the Internet for download, but it’s a hobby-project that I can feel good about. There is much to learn and that is one of the reasons for this. I also think that some distributions make too many releases. I think that a release once every year or two is adequate.

To start out, I’m building an LFS (Linux From Scratch) system. This way I’ll get a quick refresher on what goes into a basic system. Next, I’ll be trying to add RPM support (I like RPM). Once that is in place, then I’m going to figure out how to create a live system on a USB-drive using the LFS-based system. Then, I’ll be creating install scripts to install the live system to the hard-drive.

There will be a lot of work just to do that. But, I have more plans... I want to use a yum repository system and setup an add-on repository for installing the X Window System and other free packages. I also want this distribution to remain GNU-compliant, so that means nonfree packages are not allowed.

The repository structure will be something like this:
plistic-core/dev: The core system, development.
plistic-free/dev: Free packages, development.
plistic-lsb/dev: Linux Standard Base packages, development.
plistic-corex/dev: X Window core packages, development.
plistic-freex/dev: Free X Window related packages, development. 

plistic-core/<release number>: The core system, release.
plistic-free/<release number:> Free packages, release.
plistic-lsb/<release number>: Linux Standard Base packages, release.
plistic-corex/<release number>: X Window core packages, release.
plistic-freex/<release number>: Free X Window related packages, release.
 

My development machine partitions configuration:
sda1 -    /boot                - 500MB
sda2 -    /usr/src            - 12000MB
sda3 -    / (Fedora 14)    - 4000MB
sda4 -    extended          - *
sda5 -    /lfs                   - 4000MB
sda6 -    swap                - 2000MB


I just finished building the LFS tool-chain. Now time to decide on the bare-minimum packages to install on the base-system. Here's the package list (stripped from the LFS-6.8 book).
plistic-core:
  • Bash (LSB Core)
  • Binutils (LSB Core)
  • Bzip2
  • Coreutils (LSB Core)
  • E2fsprogs
  • File (LSB Core)
  • Findutils (LSB Core)
  • Glibc
  • Grep (LSB Core)
  • GRUB
  • Gzip (LSB Core)
  • Iana-etc
  • Inetutils
  • IProute2
  • Kbd
  • Less
  • Linux Kernel (Minus headers)
  • Module-Init-Tools
  • Nano
  • Ncurses (LSB Core)
  • Procps (LSB Core)
  • Psmisc (LSB Core)
  • Readline
  • RPM (When I get to package management)
  • Shadow (LSB Core)
  • Sysklogd
  • Sysvinit (Will be replaced by upstart)
  • Tar (LSB Core)
  • Udev
  • Util-linux (LSB Core)
  • yum (When I get another computer to host a yum repository)
  • Zlib (LSB Core)
plistic-free:
  • Autoconf
  • Automake
  • Bison
  • DejaGNU
  • Expect
  • Flex
  • Gettext
  • GDBM
  • GMP
  • Groff
  • Libtool
  • Linux Kernel Headers
  • Man-pages
  • MPC
  • MPFR
  • Make
  • Patch
  • Pkg-config
  • Tcl
  • Texinfo
  • Vim
  • XZ Utils
plistic-lsb:
  • At (LSB Core)
  • Alsa Libraries (LSB Multimedia)
  • ATK (LSB Desktop) 
  • Batch (LSB Core)
  • Bc (LSB Core)
  • Cairo (LSB Desktop)
  • Cpio (LSB Core)
  • CUPS (LSB Printing)
  • Desktop-file-utils (LSB Desktop)
  • Diffutils (LSB Core)
  • Ed (LSB Core)
  • Fcrontab (LSB Core)
  • Freetype (LSB Desktop)
  • Fontconfig (LSB Desktop)
  • Gawk (LSB Core)
  • Gcc (LSB C++)
  • Glib2 (LSB Desktop) 
  • GTK+2 (LSB Desktop)
  • Icon-naming-utils (LSB Desktop)
  • Install_initd (LSB Core)
  • Java (LSB Multimedia)
  • Libjpeg (LSB Desktop)
  • Libpng (LSB Desktop)
  • Libxml2 (LSB Desktop)
  • Lsb_release (LSB Core)
  • M4 (LSB Core)
  • Man-DB (LSB Core)
  • MesaLib (LSB Desktop)
  • NSPR (LSB Multimedia)
  • NSS (LSB Multimedia)
  • OpenSSL (LSB Multimedia)
  • PAM (LSB Core)
  • Pango (LSB Desktop)
  • Perl (LSB Runtime Languages)
  • Python (LSB Runtime Languages)
  • Qt3 (LSB Desktop)
  • Qt4 (LSB Desktop)
  • Remove_initd (LSB Core)
  • Sed (LSB Core) 
  • Sendmail (LSB Core)
  • Test (LSB Core)
  • Xdg-utils (LSB Multimedia)
  • Xorg (LSB Desktop)
The X Window repositories will wait... I think this is enough on my plate for now. This list is just a rough-draft... I'm going to finish the LFS system first. Once I'm running the LFS it will be time to figure out basic RPM package management and how to implement it into the LFS system.

I'm not sure how this will work. The big question with RPM is how do I add RPM packages to the system if they are already installed on the system? Do I just install the RPM and overwrite the existing files so the RPM-DB is updated? Anyway, that's a ways away, so I shouldn't fret over it quite yet. I have a lot to learn!

    No comments:

    Post a Comment