Self-Hosting Movies with MoviX

How to build your own dedicated distribution.
Compiling the Kernel

First of all, make sure your kernel is compiled with support for the RAM disk and loopback device, because you are going to use these features. It is cleaner to keep your PC kernel tree separated from the one used for the distribution. So get the latest stable kernel (2.4.20 at the time of this writing), and unpack it in a directory different from your main kernel directory.

The kernel configuration defaults are close to the ones we need. Once you are in the distribution kernel directory, run make menuconfig and add support for the following items:

  • Code maturity level options ---> Prompt for development and/or incomplete code/drivers

  • Processor type and features ---> Processor family: [choose Pentium-MMX]

  • Block device ---> Loopback device support

  • Block device ---> RAM disk support

  • Block device ---> Initial RAM disk (initrd) support

  • File systems ---> /dev file system support [select the “Automatically mount at boot” option]

Then run make bzImage to produce the kernel binary.

Creating the Filesystem

The initrd file (init Ram Disc) contains the root filesystem of the distribution. Our first initrd should contain only the system files; therefore, 5MB will be enough. To create it, we make use of the RAM discs:

dd if=/dev/zero of=/dev/ram0 bs=1k count=5000
mke2fs -m0 /dev/ram0 5000
mount /dev/ram0 /distro

The de facto standard for small distributions is the Busybox binary (the “Swiss Army Knife of Embedded Linux”) in place of the scores of small binaries we need.

Compilation instructions are pretty easy and well documented, but you also may want to take a look at Bruce Perens' Busybox articles in Embedded Linux Journal (see Resources). I suggest you compile it with support for all possible commands because, eventually, you are going to need most of them. Remember to install Busybox with ./install.sh /distro, so all links for all commands supported by your copy of Busybox automatically are created in /distro.

Binaries usually are linked dynamically to system libraries. It is possible to compile Busybox statically to save space. But, we are going to add more complex binaries to the distribution, so eventually we'll have to add dynamical libraries anyway. To add the libraries for a binary, say Busybox, the rule is always the same:

  • get the list of libraries linked to it:

    root# ldd busybox
            libc.so.6 => /lib/libc.so.6 (0x40028000)
            /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
    

  • copy all of them ton /distro/lib/.

A trick to minimize libraries size is getting rid of all the debug stuff they contain:

objcopy --strip-debug /lib/libc.so.6 /distro/lib/libc.so.6

To complete the work we need to add a few configuration scripts: /distro/etc/inittab, /distro/etc/rc.d/rc.S, /distro/etc/fstab, /distro/etc/shells and /distro/etc/profile. We also need to create a few directories: /distro/dev, /distro/mnt, distro/proc, /distro/root and /distro/tmp. We don't need to create any device node in /distro/dev, because the devfs dæmon automatically creates all devices at boot time.

Finally we can create the initrd file:

umount /dev/ram0
dd if=/dev/ram0 of=initrd bs=1k count=5000

To check that everything is okay, you can mount the initrd file and take a look inside:

mount initrd /distro -o loop
ls -lR /distro

Then remember to umount it and gzip it.

Before burning a CD, it is a good idea to test the initrd image by booting it from LILO. Create an /initrd directory in your system, put bzImage and initrd.gz there, rename bzImage as vmlinuz and add the lines in Listing 1 to lilo.conf.

Listing 1. Adding a LILO Entry

At this point run LILO, reboot and choose the “Distro” label at the LILO prompt to boot with your new distribution.

______________________

Comments

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Re: Self-Hosting Movies with MoviX

Anonymous's picture

Thanks for this very informative article, it's just what I'm looking for.

BTW, to avoid overwriting the modules of the running Linux, you can do

make INSTALL_MOD_PATH= modules_install

Suggestion for yet another dedicated distro.

Anonymous's picture

A distribution that boots into:

Freevo: http://freevo.sourceforge.net

or:

MythTV: http://www.mythtv.org

White Paper
Linux Management with Red Hat Satellite: Measuring Business Impact and ROI

Linux has become a key foundation for supporting today's rapidly growing IT environments. Linux is being used to deploy business applications and databases, trading on its reputation as a low-cost operating environment. For many IT organizations, Linux is a mainstay for deploying Web servers and has evolved from handling basic file, print, and utility workloads to running mission-critical applications and databases, physically, virtually, and in the cloud. As Linux grows in importance in terms of value to the business, managing Linux environments to high standards of service quality — availability, security, and performance — becomes an essential requirement for business success.

Learn More

Sponsored by Red Hat

White Paper
Private PaaS for the Agile Enterprise

If you already use virtualized infrastructure, you are well on your way to leveraging the power of the cloud. Virtualization offers the promise of limitless resources, but how do you manage that scalability when your DevOps team doesn’t scale? In today’s hypercompetitive markets, fast results can make a difference between leading the pack vs. obsolescence. Organizations need more benefits from cloud computing than just raw resources. They need agility, flexibility, convenience, ROI, and control.

Stackato private Platform-as-a-Service technology from ActiveState extends your private cloud infrastructure by creating a private PaaS to provide on-demand availability, flexibility, control, and ultimately, faster time-to-market for your enterprise.

Learn More

Sponsored by ActiveState