Changes

Jump to: navigation, search

Creating OpenVZ LiveCD based on Centos 4.4

1,891 bytes added, 07:55, 26 August 2010
m
Reverted edits by 3qdesigns123 (Talk) to last revision by Kirshil
This part contains detailed description of LiveCD creation. I've removed the output of some
commands in order to simplify the reading.
 
Note: before proceed with commands below, one needs to disable SE Linux on the host, otherwise rpm operations
in cdroot-ed environment described later on will fail due to inability to restore security file context. So, please,
do:
<pre>
# setenforce 0
</pre>
This will put SE linux in so-called 'permissive' mode, where all the blockers will be substituted by warnings.
If you wanna get rid of the warnings (rather annoying), the only way to do is to edit <tt>/etc/sysconfig/selinux</tt>
to read <tt>SELINUX=disabled</tt> and then reboot the host.
=== Creating booted LiveCD root filesystem ===
# cp mksquashfs /usr/bin/
# cd ~/workbench/-
# wget http://belnet.dl.sourceforge.net/sourceforge/squashfs/squashfs3.2-r2.tar.gz
# tar xzf squashfs3.2-r2.tar.gz
cc unsquashfs.o -lz -o unsquashfs
# cp unsquashfs /usr/bin/
# cd ~/workbench-
</pre>
Well, having the intruments in hand, why not extract the images? Create a directory, called <tt>livecd-root</tt>,
# mkdir livecd-root
# for f in bin etc lib root sbin usr var; do \ unsquashfs ovz-livecd/base/bin$f.mo ; \# mv squashfs-root/bin$f/ livecd-root/; \# rm -rf squashfs-root; \ done# unsquashfs ovz-livecd</base/etc.mo # mv squashfs-root/etc/ livecd-root/# rm -rf squashfs-rootpre>
# unsquashfs ovz-livecd/base/libBe patient, this will take a few minutes.mo # mv squashfs-root/lib/ livecd-root/# rm -rf squashfs-root
# unsquashfs ovz-livecd/base/root.mo
# mv squashfs-root/root/ livecd-root/
# rm -rf squashfs-root
 
# unsquashfs ovz-livecd/base/sbin.mo
# mv squashfs-root/sbin/ livecd-root/
# rm -rf squashfs-root
 
# unsquashfs ovz-livecd/base/usr.mo # this action takes some time, be patient ;)
# mv squashfs-root/usr/ livecd-root/
# rm -rf squashfs-root
 
# unsquashfs ovz-livecd/base/var.mo
# mv squashfs-root/var/ livecd-root/
# rm -rf squashfs-root
</pre>
Yet we have nearly complete root filesystem of '''booted''' LiveCD in <tt>livecd-root</tt> directory. However some things
are missing, and I guess you know what are they: <tt>/dev</tt>, <tt>/proc</tt>, <tt>/sys</tt>, <tt>/tmp</tt> and <tt>/boot</tt> directories. We need them, because some tools (<tt>rpm</tt>, <tt>bash</tt>, ...) will not work without them in chrooted environment later.
<pre>
# cd livecd-root# mkdir root/dev# cp -a /dev/* rootdev/dev# mkdir root/proc# mount -t proc proc root/proc/# mkdir root/sys# mount -t sysfs sysfs root/sys/# mkdir root/tmp# mkdir root/boot# cd -
</pre>
That's it. We have '''bootedbootstrapped''' LiveCD root filesystem in <tt>livecd-root</tt> directory.
Now we can <tt>chroot</tt> in this directory and install all needed packages. But what
packages do we need?
OpenVZ LiveCD supports several kernels. So, the actions mentioned above should be accomplished to all kernels,
that you need on LiveCD. In this article I skip the description of building RPMS for all kernels. All description
below are based on <tt>028stab035</tt> kernel, that has been just build above. But some important differences in buildingkernel of version other then 2.6.18 one is summarized below.==== Peculiarities of building 2.6.9-rhel4 ====* You should also include this patch (http://git.openvz.org/?p=linux-2.6.18-openvz;a=commit;h=681d0b65dedd54d8c716cef56418ac1a478f94da)in building process. Hopefully will be fixed in <tt>2.6.9-044stab044.8</tt> kernel.* Use <tt>unionfs 1.0.14</tt>, but not <tt>unionfs 1.1.5</tt>, as offered at its official site!* Small problems while building <tt>unionfs</tt>: arguments of <tt>vfs_permissions()</tt>. Just add <tt>NULL</tt>to appropriate places. ==== Peculiarities of building 2.6.18-rhel5 ====* Note, <tt>squashfs</tt> patch is already there, but you should use <tt>3.2</tt>! :)* While building <tt>unionfs</tt> some small fixes: <tt>i_blksize</tt> field is missing in <tt>inode</tt> structure, <tt>ino_t</tt> should be changed to <tt>u64</tt> in some functions. ==== Peculiarities of building 2.6.20 ====* Only <tt>unionfs</tt> <tt>2.0</tt> is available for 2.6.20 kernel and it is distributed as a patch. Consequently modify <tt>spec</tt>-file and configs while building the kernel* <tt>unionfs</tt> <tt>2.0</tt> doesn't support unionctl. Consequently you have to modify <tt>liblinuxlive</tt> file on <tt>initrd</tt> image to mount all branches at once, but don't add them by ioctls.
=== Unionfs kernel module ===
<tt>tetex</tt>, <tt>latex</tt>, <tt>k3b</tt> and printing related packages:
<pre>
# cp -r to_booted_livecd/ livecd-root/tmp/# chroot livecd-root/
# rpm -e lksctp-tools-1.0.2-6.4E.1.i386
Clean it:
<pre>
# rm livecd-root/root/.bash_history
</pre>
Here we have to make one step to workaround [[Checkpointing and live migration]] problem. The thing is that at the moment
on this directory:
<pre>
mkdir livecd-root/vz/private/
</pre>
At the moment vzquota doesn't support <tt>tmpfs</tt> ([http://bugzilla.openvz.org/show_bug.cgi?id=558 Bug #558]).
We're working on this problem, but for now '''switching the disk quota off''' in <tt>/etc/vz/vz.conf</tt>: <tt>DISK_QUOTA=no</tt>.But when disk quota is off <tt>vzmigrate</tt> fails! ;) This is the [http://bugzilla.openvz.org/show_bug.cgi?id=558 Bug #512].So, don't forget to apply the patch attached to this bug report to <tt>vzmigrate</tt>.
'''Booted''' LiveCD filesystem is ready, congratulations!
<pre>
# rm -f ovz-livecd/base/*.mo
# mksquashfs root/lib/ ovz-livecd/base/for f in bin.mo -keep-as-directory# mksquashfs root/etc/ ovz-livecd/base/etc.mo -keep-as-directory# mksquashfs root/lib/ ovz-livecd/base/lib.mo -keep-as-directory# mksquashfs root/root/ ovz-livecd/base/root.mo -keep-as-directory# mksquashfs root/sbin/ ovz-livecd/base/sbin.mo -keep-as-directoryusr var vz; do \# mksquashfs root/usr/ ovz-livecd/base/usr.mo -keep-as-directory # it can take long...# mksquashfs root/var/ $f ovz-livecd/base/var$f.mo -keep-as-directory; \# mksquashfs root/vz/ ovz-livecd/base/vz.mo -keep-as-directory done
</pre>
than 8 characters) to kernel image, otherwise <tt>isolinux</tt> will not see it.
<pre>
# cp livecd-root/boot/vmlinuz-2.6.18-ovz028stab035.1-smp ovz-livecd/boot/ovz18
</pre>
Modify initrd image. More precisely, we need to add OpenVZ kernel modules there
# mount -o loop initrd-old mount-old/
# dd if=/dev/zero of=initrd bs=1048576 count=100
# mke2fs initrd
initrd is not a block special device.
Proceed anyway? (y,n) y
...
# mkdir mount
# mount -o loop initrd mount/
Copy modules to initrd:
<pre>
# cp -r ../livecd-root/lib/modules/2.6.18-ovz028stab035.1-smp/ mount/lib/modules/
# rm -rf mount/lib/modules/2.6.18-ovz028stab035.1-smp/build # we don't neet it on initrd image
</pre>
I also delete some not necessary kernel modules from initrd to free space.
They are stil on CD, so init sctipts will be able to load them later.
 
initrd image, that goes with Centos 4.4 LiveCD doesn't load cdrom kernel modules.
It works well for CentOS kernel, because cdrom support is built-in there.
# umount mount/
# gzip initrd
# /bin/cp initrd.gz ../ovz-livecd/boot/initrd.gz
# cd ..
</pre>
+label ovz18
+kernel boot/ovz18
+append max_loop=32 vga=791 initrd=boot/initrd.gz init=linuxrc load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=102400 root=/dev/ram0 rw rhgb quiet
+
label memtest
</pre>
Also '''don't forget''' to change <tt>ramdisk_size</tt> to 102400 for all kernels including Centos 4.4 default! And I suggest to remove <tt>quiet</tt> parameter, to see what happens: it will help greatly if some problem will happen.
=== Embellishment ===
file. I added OpenVZ logo there. The following tools will help you: <tt>lss16toppm</tt>, <tt>ppmtolss16</tt> and
of course <tt>gimp</tt> :)
 
One more thing we change is default desktop background. It resides in <tt>usr/share/backgrounds/images/default.png</tt>.
I added OpenVZ logo there.
=== Creating ISO ===
Centos 4.4 LiveCD creators were very gentle and have placed <tt>make_iso.sh </tt> script on CD.
Using this script, it is very easy to create iso:
<pre>
# cd ovz-livecd# ./make_iso.sh ../CentOS-4.4-i386-OpenVZ-LiveCD.iso
</pre>
</pre>
command line options. It will help you to diagnose the problem more precisely.
Also it can be useful to redirect kernel output to serial console:
<pre>
console=ttyS0,115200 console=tty
</pre>
 
See more at [[remote console setup]].
== External Links ==
* [http://squashfs.sourceforge.net/ squashfs website]
* [http://www.filesystems.org/project-unionfs.html uninonfs official homepage]
 
[[Category: HOWTO]]
[[Category: Live CD]]

Navigation menu