Open main menu

OpenVZ Virtuozzo Containers Wiki β

Changes

Slackware template creation

7,007 bytes added, 19:08, 6 June 2006
no edit summary
This page is about making a template cache for OpenVZ [[VE]] from Slackware linux.
(This method was used for creating the minimal cache from Slackware 10.2)
The method is basically the same as described in article [[Debian template creation]].

== Getting a Slackware root filesystem ==

=== Downloading and installing Slackware ===

First you need to download Slackware linux from [http://www.slackware.org/getslack/ http://www.slackware.org/getslack/]. Then you have to [http://www.slackware.org/install/ install] it to some hardware you can spare while the cache creation process is going on. For [[VE]] creation it is recommended not to install any unnecessary software into the box you are making the cache from.
This means for a minimal Slackware 10.2 cache I have chosen only series A (<tt>Base Linux System</tt>) at the package series selection screen of Slackware Setup. Then '''expert''' prompting mode on the next screen. On the Series A package selection screen I chose the following packages:

* kernel-ide <i>- This is requied to boot the OS to be able to get it's root filesystem</i>
* aaa_base
* aaa_elflibs
* bash
* bin
* bzip2
* coreutils
* cxxlibs
* dcron
* devs
* e2fsprogs <i>- This is not really needed for a VE, but let him install it</i>
* elvis
* etc
* gawk
* glibc-solibs
* grep
* gzip
* kernel-modules <i>- This is needed for the first boot only as kernel-ide</i>
* less
* lilo <i>- For first boot only too</i>
* logrotate
* module-init-tools
* openssl-solibs
* pkgtools
* procps
* sed
* shadow
* sysklogd
* sysvinit
* tar
* udev
* util-linux

After selecting these packages just install the kernel and lilo, you are ready to run Slackware!

=== Configuring Slackware for acting as a VE ===

Now that you have a running minimal Slackware installation, You can begin to prepare it to be
a template for a [[VE]]. First you need some additional packages, 7 exactly:

* groff-1.19.1-i486-3.tgz <i>from the slackware/ap directory of installation media</i>
* man-1.5p-i486-1.tgz <i>from the slackware/ap directory of installation media</i>
* quota-3.12-i486-1.tgz <i>from the slackware/ap directory of installation media</i>
* iptables-1.3.3-i486-1.tgz <i>from the slackware/n directory of installation media</i>
* openssh-4.2p1-i486-1.tgz <i>from the slackware/n directory of installation media</i>
* tcpip-0.17-i486-35.tgz <i>from the slackware/n directory of installation media</i>
* whois-4.6.16-i486-1.tgz <i>from the slackware/n directory of installation media</i>

You can install these packages issuing the following command:
<pre>
# installpkg <packagename>
</pre>

After these steps, you are ready to move your Slackware installation into a [[VE]]

=== Moving a Slackware installation into a VE ===

I did it by compressing the whole filesystem into a tgz file and copying it to the host running OpenVZ.

Compressing it is easy:
<pre>
# tar czf /slackware.tgz /
</pre>

But to copy it, you need to setup a network device on the slackware system (use <tt>ifconfig</tt> and <tt>ftp</tt> or manually remove the hard drive containing the Slackware installation and copying the tgz file from there.

After you got the tgz file on the host, make a new directory into /vz/private with a new VPSID, for example 777.
Uncompress the tgz file into this directory and delete it.
<pre>
mv slackware.tgz /vz/private/777
cd /vz/private/777
gunzip -dc slackware.tgz |tar -xvf -
rm /vz/private/777/slackware.tgz
</pre>

== Preparing the new VE ==

=== Creating a new .conf file ===

Now you need to create the config file for the Slackware [[VE]], 777.conf.

<pre>
vzctl set 777 --applyconfig vps.basic --save
</pre>

You need to set it's OSTEMPLATE.
<pre>
echo "OSTEMPLATE=slackware-10.2-i486-minimal" >> /etc/sysconfig/vz-scripts/777.conf
</pre>

And an IP address and a Hostname
<pre>
vzctl set 777 --ipadd x.x.x.x --save
vzctl set 777 --hostname myslacky --save
</pre>

=== Getting the filesystem ready to run in a VE ===

Now you need to make some minor alterations under the /vz/private/777 directory.

==== Delete the directory /lost+found, clean /boot, /tmp, and /var/mail and make /proc ====
<pre>
rm -r /vz/private/777/lost+found
rm /vz/private/777/boot/*
rm /vz/private/777/tmp/*
rm /vz/private/777/var/mail/*
mkdir /vz/private/777/proc
</pre>

==== Delete the kernel modules from /lib/modules ====
<pre>
rm -r /vz/private/777/lib/modules
</pre>

==== Make a home directory for root, readable only by him ====
<pre>
mkdir /vz/private/777/root
chmod 0700 /vz/private/777/root
</pre>

==== Delete all keys from /vz/private/777/etc/ssh ====
<pre>
rm /vz/private/777/etc/ssh/*key*
</pre>
This will ensure that a unique ssh key is generated for every single [[VE]] at the first boot.
Edit ssh_config and sshd_config here if you want.

==== Delete the file /etc/mtab and make it a symlink to /proc/mounts. ====
<pre>
rm /vz/private/777/etc/mtab
ln -s /vz/private/777/etc/mtab /proc/mouns
</pre>

==== Clean the /etc/fstab file ====
<pre>
echo -n > /vz/private/777/etc/fstab
</pre>

==== Edit /vz/private/777/etc/inittab ====

Edit /vz/private/777/etc/inittab, put a hashmark (#) before the lines containing ====
<pre>
c?:1235:respawn:/sbin/agetty 38400 tty? linux
</pre>
This will prevent linux gettys to spawn.

==== Edit /vz/private/777/etc/shadow====

Edit /vz/private/777/etc/shadow, change root's password in the first line to an exclamation mark (!):
<pre>
#root:!:13305:0:::::
</pre>
This will disable the root login until the password chaned with "vzctl set VPSID --userpasswd root:xxx"

==== Edit /vz/private/777/etc/rc.d/rc.S ====

Edit /vz/private/777/etc/rc.d/rc.S, put a hashmark (#) before the line containing:
<pre>
/bin/rm -f /etc/mtab*
</pre>
This should be line 162. This will forbid Slackware to delete our symlink at every reboot.

==== Edit /vz/private/777/etc/rc.d/rc.syslog ====

Edit /vz/private/777/etc/rc.d/rc.syslog, put a hashmark (#) before the lines containing
<pre>
sleep 1
echo "/usr/bin/klogd -c 3 -x"
/usr/bin/klogd -c 3 -x
killall klogd 2> /dev/null
</pre>
These should be lines 11, 12, 15 and 21. This will prevent klogd (which is not needed) from starting at boottime.

== Testing the new VE and making a cache file ==

=== Testing the new VE ===

To test the new [[VE]], simply start it:
<pre>
vzctl start 777
</pre>
If you did everythingall right (and I didn't make a mistake here) your new slackware will boot.

If the VE booted, and you can enter/ssh in it, then stop it.
<pre>
vzctl stop 777
</pre>

=== Making a cache file ===

Now make a .tar.gz out of the [[VE]]:
<pre>
tar czf /vz/template/cache/slackware-10.2-i486-minimal.tar.gz /vz/private/777/
</pre>

== Testing the new cache file ==

To test the the new cache file, issue:
<pre>
vzctl create 555 --ostemplate slackware-10.2-i486-minimal --ipadd x.x.x.x --hostname testy
</pre>

If created successfully, try to start it:
<pre>
vzctl start 555
</pre>
If it started, and you can ssh in, congratulations, you've got a working slackware template!

[[Category: HOWTO]]
[[Category: Templates]]
9
edits