Difference between revisions of "Creating a template cache : Slackware or HostGIS Linux"

From OpenVZ Virtuozzo Containers Wiki
Jump to: navigation, search
Line 1: Line 1:
−
Creating a new Host Template Cache
+
== Creating a new Host Template Cache for HostGIS Linux 4.x or Slackware 11.x/12.x ==
−
for HostGIS Linux 4.x or Slackware 11.x/12.x
 
  
 
This process uses VMWare to install the OS into a VM, then to trim down the VM's contents to only those items suitable for a VPS/VE environment, then to save a snapshot of the system as a host template cache for use in OpenVZ.
 
This process uses VMWare to install the OS into a VM, then to trim down the VM's contents to only those items suitable for a VPS/VE environment, then to save a snapshot of the system as a host template cache for use in OpenVZ.
  
 +
This document focuses on HostGIS Linux (a Slackware derivative) but aside from the specifics about installation settings, it should be 99% applicable to Slackware as well.
  
−
***** CREATING THE VM
 
  
−
Start by creating a new VM in VMWare. The stats can be minimal, and there
+
=== Create the VM in VMWare ===
−
is no need to create the entire disk at once during the setup.
 
−
  * Create the disk as SCSI.
 
  
−
Then install HGL.
+
Technically, you could probably do this on a hardware PC without VMWare, but VMWare does make it more convenient.
−
  * Create a small partition at the end of the disk for swap. Some swap
 
−
    is technically necessary, but since you'll never in fact be using it,
 
−
    a few MB should be fine.
 
−
  * Set the passwords to 'password'
 
−
  * Do set the timezone properly. The internal clock does not use UTC/GMT.
 
−
  * Select the default mouse, but do NOT enable GPM at startup.
 
−
  * Hostname:  template  Domain: internal.lan
 
−
  * IP config:  as appropriate for your LAN
 
−
  * Nameserver: no
 
−
Reboot into your new HGL install.
 
  
−
Now we want to tweak it into a usable template.
+
Start by creating a new VM in VMWare.
−
Go ahead and login to the VM.
+
* The disk and RAM stats can be minimal, as the system will never see live use.
 +
* There is no need to create the entire disk at once during the setup.
 +
* Create the disk as SCSI.
  
 +
Then install HGL.
 +
* Create a small partition at the end of the disk for swap. Some swap is technically necessary, but since you'll never in fact be using it, a few MB should be fine.
 +
* Set the passwords to 'password'
 +
* Do set the timezone properly. The internal clock does not use UTC/GMT.
 +
* Select the default mouse, but do NOT enable GPM at startup.
 +
* Hostname:  template  Domain: internal.lan
 +
* IP config:  as appropriate for your LAN
 +
* Nameserver: no
  
 +
Reboot into your new HGL install, and log in.
  
−
***** UPGRADES AND SECURITY PATCHES
 
−
 
−
The default HGL you used may require some software to be reinstalled, since new versions
 
−
and critical bugfixes may have been released since that version of HGL was released.
 
−
Follow these instructions, and also update them as necessary for the appropriate versions
 
−
and to remove paragraphs when a revision of HGL comes out that no longer requires them.
 
−
 
−
# HGL 4.2 - no necessary upgrades as of Nov 29 2007
 
−
 
−
 
−
 
−
***** REPLACE INETD WITH XINETD
 
−
 
−
Inetd is good but minimal. Xinetd offers security features, such as restricting service
 
−
to only certain IPs, and only listening on certain interfaces,.
 
−
 
−
removepkg inetd
 
−
rm -f /etc/inetd.conf* /etc/rc.d/rc.inetd
 
−
 
−
cd /tmp
 
−
wget --header="Host: xinetd.org" http://204.152.188.37/xinetd-2.3.14.tar.gz
 
−
tar zxvf xinetd*.gz
 
−
cd xinetd*
 
−
./configure --prefix=/usr --sysconfdir=/etc
 
−
make && make install
 
−
mkdir /etc/xinetd.d
 
−
cat >> /etc/rc.d/rc.local <<EOF
 
  
−
# xinetd
+
== Delete unnecessary stuff ==
−
/usr/sbin/xinetd
 
−
EOF
 
−
cat > /etc/xinetd.conf <<EOF
 
−
defaults
 
−
{
 
−
        log_type        = SYSLOG daemon notice
 
−
        log_on_success  = HOST EXIT DURATION
 
−
        log_on_failure  = HOST ATTEMPT
 
−
        instances      = 30
 
−
        cps            = 50 10
 
−
}
 
−
includedir /etc/xinetd.d
 
−
EOF
 
  
 +
<code>
  
 +
  # kernel, kernel modules, documentation, mount points
 +
  rm -rf /lib/modules /boot /dev/.udev /usr/doc /usr/info /media
  
−
***** NAGIOS: THE HEALTH-MONITORING SYSTEM
+
  # packages not applicable to a VPS setting, or which we don't use at HostGIS
 +
  # e.g. phpMyAdmin and phpPgAdmin are security holes
 +
  cd /var/log/packages
 +
  for pkg in \
 +
    hotplug-* hdparm-* devmapper-* udev-* usbutils-* pciutils-* module-init-tools-* \
 +
    mdadm-* floppy-* lvm2-* phpMyAdmin-* phppgAdmin-* raidtools-* reiserfsprogs-* \
 +
    smartmontools-* sysfsutils-* syslinux-* wireless_tools.* quota-* iptables-*
 +
  do removepkg $pkg ; done
  
−
groupadd nagios
+
  # most folks don't use GeoServer, so disable it by default
−
useradd -g nagios -d /usr/local/nagios -m nagios
+
  chmod 644 /etc/rc.d/rc.geoserver
−
echo "nrpe            5666/tcp  # Nagios NRPE" >> /etc/services
 
  
−
cd /tmp
+
  # prune init's getty
−
wget http://superb-east.dl.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.10.tar.gz
+
  vi  /etc/inittab # delete everything after entry l6 (runlevel 6)
−
tar zxvf nagios-plugins-*.tar.gz ; cd nagios-plugins-*
+
  init q
−
./configure && make all && make install
 
−
cd /tmp
 
−
wget http://umn.dl.sourceforge.net/sourceforge/nagios/nrpe-2.10.tar.gz
 
−
tar zxvf nrpe-2.10.tar.gz ; cd nrpe-2.10
 
−
./configure && make && cp src/nrpe /usr/local/nagios/nrpe
 
  
−
for plugin in \
+
  # clean out the fstab and mtab files
−
  check_wave check_users check_ups check_time check_tcp check_swap check_ssh check_ssmtp \
+
  ( cd /etc ; rm -f fstab mtab ; ln -s ../proc/mounts mtab )
−
  check_spop check_simap check_smtp check_sensors check_rpc check_real check_pop check_ping \
+
  echo "proc    /proc      proc    defaults    0  0" >> /etc/fstab
−
  check_overcr check_oracle check_nwstat check_nt check_nntps check_nntp check_nagios \
+
  echo "devpts  /dev/pts  devpts  mode=0620  0  0" >> /etc/fstab
−
  check_mysql_query check_mrtgtraf check_mrtg check_log check_jabber check_ircd \
 
−
  check_imap check_ifstatus check_ifoperstatus check_icmp check_http check_ftp check_flexlm \
 
−
  check_file_age check_dummy check_disk_smb check_dig check_dhcp check_clamd check_by_ssh \
 
−
  check_breeze check_apt check_udp
 
−
do rm -f /usr/local/nagios/libexec/$plugin ; done
 
  
−
cat > /usr/local/nagios/nrpe.cfg <<EOF
+
  # the startup sequence and services, even the firewall
−
# NRPE Config File
+
  cd /etc/rc.d
−
pid_file=/var/run/nrpe.pid
+
  rm -f rc.gpm-sample rc.gpm rc.hotplug rc.ip_forward rc.modules \
−
debug=0
+
        rc.scanluns  rc.serial rc.udev rc.sysvinit  rc.firewall
−
command_timeout=60
+
  vi rc.syslog    # delete all mentions of klogd
−
connection_timeout=300
+
  vi rc.local    # delete smartd and inetd
 +
  vi rc.M        # delete the setterm entry
 +
  vi rc.S        # delete the MOTD clobbering
 +
</code>
  
−
# And now the list of allowed check-commands:
 
−
command[check_disk]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -m /
 
−
command[check_dns]=/usr/local/nagios/libexec/check_dns www.google.com
 
−
command[check_load]=/usr/local/nagios/libexec/check_load -w 5,5,5 -c 8,8,8
 
−
command[check_mailq]=/usr/local/nagios/libexec/check_mailq -w 10 -c 20
 
−
command[check_mysql]=/usr/local/nagios/libexec/check_mysql -d gisdata -H localhost -u gisdata -p password
 
−
command[check_pgsql]=/usr/local/nagios/libexec/check_pgsql -d gisdata -H localhost -l gisdata -p password
 
−
command[check_ntp]=/usr/local/nagios/libexec/check_ntp -H pool.ntp.org
 
−
command[check_crond]=/usr/local/nagios/libexec/check_procs -u root -c 1: --command=crond
 
−
command[check_syslogd]=/usr/local/nagios/libexec/check_procs -u root -c 1:1 --command=syslogd
 
−
command[check_xinetd]=/usr/local/nagios/libexec/check_procs -u root -c 1:1 --command=xinetd
 
−
EOF
 
  
−
cat > /etc/xinetd.d/nrpe <<EOF
+
== Fix permissions and ownerships ==
−
# description: NRPE for Nagios
 
−
service nrpe
 
−
{
 
−
  socket_type    = stream
 
−
  protocol        = tcp
 
−
  wait            = no
 
−
  user            = nagios
 
−
  server          = /usr/local/nagios/nrpe
 
−
  server_args    = -c /usr/local/nagios/nrpe.cfg --inetd
 
−
  only_from      = __HOSTIP__
 
−
}
 
−
EOF
 
  
−
chown -R nagios:nagios /usr/local/nagios
+
<code>
−
chmod -R o-rwx /usr/local/nagios
 
−
chmod go-rwx /etc/xinetd.d
 
−
 
 
−
 
 
−
 
 
−
 
 
−
***** OTHER UNNECESSARY STUFF
 
−
 
 
−
# kernel, kernel modules, documentation, mount points
 
−
rm -rf /lib/modules /boot /dev/.udev /usr/doc /usr/info /media
 
−
 
 
−
# packages not applicable to a VPS setting, or which we don't use at HostGIS
 
−
# e.g. phpMyAdmin and phpPgAdmin are security holes
 
−
cd /var/log/packages
 
−
for pkg in \
 
−
  hotplug-* hdparm-* devmapper-* udev-* usbutils-* pciutils-* module-init-tools-* \
 
−
  mdadm-* floppy-* lvm2-* phpMyAdmin-* phppgAdmin-* raidtools-* reiserfsprogs-* \
 
−
  smartmontools-* sysfsutils-* syslinux-* wireless_tools.* quota-* iptables-*
 
−
do removepkg $pkg ; done
 
−
 
 
−
# most folks don't use GeoServer, so disable it by default
 
−
chmod 644 /etc/rc.d/rc.geoserver
 
−
 
 
−
# prune init's getty
 
−
vi  /etc/inittab # delete everything after entry l6 (runlevel 6)
 
−
init q
 
−
 
 
−
# clean out the fstab and mtab files
 
−
( cd /etc ; rm -f fstab mtab ; ln -s ../proc/mounts mtab )
 
−
echo "proc    /proc      proc    defaults    0  0" >> /etc/fstab
 
−
echo "devpts  /dev/pts  devpts  mode=0620  0  0" >> /etc/fstab
 
−
 
 
−
# the startup sequence and services, even the firewall
 
−
cd /etc/rc.d
 
−
rm -f rc.gpm-sample rc.hotplug rc.ip_forward rc.modules rc.scanluns  rc.serial rc.udev rc.sysvinit rc.firewall
 
−
vi rc.syslog    # delete all mentions of klogd
 
−
vi rc.local    # delete smartd and inetd
 
−
vi rc.M        # delete the setterm entry
 
−
vi rc.S        # delete the MOTD clobbering
 
−
 
 
−
# blow away the network configuration with dummy strings for later replacement
 
−
#    replace the IP address with __IPADDRESS_
 
−
#    replace the netmask with __NETMASK__
 
−
#    replace the GATEWAY with __GATEWAY__
 
−
vi /etc/rc.d/rc.inet1.conf
 
−
 
 
−
 
 
−
 
 
−
***** BASIC FILE SECURITY SETTINGS
 
  
 
# clear out old/dummy SSL certificates
 
# clear out old/dummy SSL certificates
Line 211: Line 98:
 
chmod g+rx /var/spool/mqueue
 
chmod g+rx /var/spool/mqueue
  
−
# disable the root and user accounts
+
</code>
−
# by changing the password for root and user to a ! character.
 
−
vi /etc/shadow
 
  
  
−
 
+
== Changes to rc scripts ==
−
***** REBOOTING
 
  
 
A VPS cannot actually reboot, since there's no power switch to power-cycle the machine
 
A VPS cannot actually reboot, since there's no power switch to power-cycle the machine
Line 226: Line 110:
  
 
Also, the /etc/mtab file should point to /proc/mounts so it can detect the / filesystem.
 
Also, the /etc/mtab file should point to /proc/mounts so it can detect the / filesystem.
 +
 +
<code>
  
 
vi /etc/rc.d/rc.6
 
vi /etc/rc.d/rc.6
Line 237: Line 123:
 
rm -f /etc/mtab ;  ln -s /proc/mounts /etc/mtab
 
rm -f /etc/mtab ;  ln -s /proc/mounts /etc/mtab
  
 +
</code>
  
  
−
***** DELETING AND BLANKING SETTINGS
+
== Blanking settings ==
  
 
Lastly, you'll want to delete or blank out a bunch of files so they start fresh
 
Lastly, you'll want to delete or blank out a bunch of files so they start fresh
 
when the VE is booted for its first time.
 
when the VE is booted for its first time.
 +
 +
<code>
  
 
# stop all services
 
# stop all services
Line 253: Line 142:
 
killall named proftpd
 
killall named proftpd
 
killall xinetd
 
killall xinetd
 +
 +
# blow away the network configuration with dummy strings for later replacement
 +
#    replace the IP address with __IPADDRESS_
 +
#    replace the netmask with __NETMASK__
 +
#    replace the GATEWAY with __GATEWAY__
 +
vi /etc/rc.d/rc.inet1.conf
 +
 +
# disable the root and user accounts
 +
# by changing the password for root and user to a ! character.
 +
vi /etc/shadow
  
 
# refresh the 'locate' cache
 
# refresh the 'locate' cache
Line 286: Line 185:
 
rm -rf /tmp/*
 
rm -rf /tmp/*
  
 +
</code>
  
  
 +
== Zipping it up into a cache image ==
  
−
***** CREATING THE VE CACHE IMAGE
+
A VE cache is just a tar.gz file of the entire filesystem, excluding some very dynamic stuff which gets populated by the OS at runtime anyway:
  
−
A VE cache is just a tar.gz file of the entire filesystem. So creating them is simple!
+
<code>
  
 
tar zcvf /tmp/HostGIS_Linux_4.2_64bit.tar.gz --exclude='/sys/*' --exclude='/proc/*' --exclude='/tmp/*' /
 
tar zcvf /tmp/HostGIS_Linux_4.2_64bit.tar.gz --exclude='/sys/*' --exclude='/proc/*' --exclude='/tmp/*' /
  
−
Ta-da! That's your new VE template cache. Just SFTP it to the VE server and you're all set!
+
</code>

Revision as of 16:48, 30 November 2007

Creating a new Host Template Cache for HostGIS Linux 4.x or Slackware 11.x/12.x

This process uses VMWare to install the OS into a VM, then to trim down the VM's contents to only those items suitable for a VPS/VE environment, then to save a snapshot of the system as a host template cache for use in OpenVZ.

This document focuses on HostGIS Linux (a Slackware derivative) but aside from the specifics about installation settings, it should be 99% applicable to Slackware as well.


Create the VM in VMWare

Technically, you could probably do this on a hardware PC without VMWare, but VMWare does make it more convenient.

Start by creating a new VM in VMWare.

  • The disk and RAM stats can be minimal, as the system will never see live use.
  • There is no need to create the entire disk at once during the setup.
  • Create the disk as SCSI.

Then install HGL.

  • Create a small partition at the end of the disk for swap. Some swap is technically necessary, but since you'll never in fact be using it, a few MB should be fine.
  • Set the passwords to 'password'
  • Do set the timezone properly. The internal clock does not use UTC/GMT.
  • Select the default mouse, but do NOT enable GPM at startup.
  • Hostname: template Domain: internal.lan
  • IP config: as appropriate for your LAN
  • Nameserver: no

Reboot into your new HGL install, and log in.


Delete unnecessary stuff

 # kernel, kernel modules, documentation, mount points
 rm -rf /lib/modules /boot /dev/.udev /usr/doc /usr/info /media
 # packages not applicable to a VPS setting, or which we don't use at HostGIS
 # e.g. phpMyAdmin and phpPgAdmin are security holes
 cd /var/log/packages
 for pkg in \
    hotplug-* hdparm-* devmapper-* udev-* usbutils-* pciutils-* module-init-tools-* \
    mdadm-* floppy-* lvm2-* phpMyAdmin-* phppgAdmin-* raidtools-* reiserfsprogs-* \
    smartmontools-* sysfsutils-* syslinux-* wireless_tools.* quota-* iptables-*
 do removepkg $pkg ; done
 # most folks don't use GeoServer, so disable it by default
 chmod 644 /etc/rc.d/rc.geoserver
 # prune init's getty
 vi  /etc/inittab # delete everything after entry l6 (runlevel 6)
 init q
 # clean out the fstab and mtab files
 ( cd /etc ; rm -f fstab mtab ; ln -s ../proc/mounts mtab )
 echo "proc     /proc      proc     defaults    0  0" >> /etc/fstab
 echo "devpts   /dev/pts   devpts   mode=0620   0  0" >> /etc/fstab
 # the startup sequence and services, even the firewall
 cd /etc/rc.d
 rm -f rc.gpm-sample rc.gpm rc.hotplug rc.ip_forward rc.modules \
       rc.scanluns  rc.serial rc.udev rc.sysvinit   rc.firewall
 vi rc.syslog    # delete all mentions of klogd
 vi rc.local     # delete smartd and inetd
 vi rc.M         # delete the setterm entry
 vi rc.S         # delete the MOTD clobbering


Fix permissions and ownerships

  1. clear out old/dummy SSL certificates

mv /etc/ssl/openssl.cnf /tmp ; rm -r /etc/ssl/* ; mv /tmp/openssl.cnf /etc/ssl

  1. fix file permissions

find / -mount -nouser -exec chown root {} \; & find / -mount -nogroup -exec chgrp root {} \; & for i in \

  /bin/ping /bin/mount /bin/ping6 /bin/umount /usr/bin/chfn \
  /usr/bin/chsh /usr/bin/crontab /usr/bin/chage /usr/bin/traceroute6 /usr/bin/traceroute \
  /usr/bin/expiry /usr/bin/newgrp /usr/bin/passwd /usr/bin/gpasswd \
  /usr/libexec/ssh-keysign /usr/libexec/pt_chown /usr/bin/wall /usr/bin/write
  do chmod u-s $i ; done
  1. fix Apache's configuration:
  2. add ServerTokens prod
  3. go to the htdocs Directory definition and change Indexes to -Indexes
  4. delete the entries for phpmyadmin and phppgadmin

vi /etc/apache/httpd.conf

  1. keep FTP users chrooted:

echo "" >> /etc/proftpd.conf echo "# keep all users chrooted to their homedir" >> /etc/proftpd.conf echo "DefaultRoot ~" >> /etc/proftpd.conf

  1. allow the mailq to be checked by anybody:

chgrp smmsp /var/spool/mqueue chmod g+rx /var/spool/mqueue


Changes to rc scripts

A VPS cannot actually reboot, since there's no power switch to power-cycle the machine after the VE has been shut down. OpenVZ emulates this effect with an external cronjob called vpsreboot (see /etc/cron.d/vz). In order to reboot a VPS that has been shut down and which is expecting a reboot, the shutdown sequence must create a file named /reboot in the VPS's filesystem.

Also, the /etc/mtab file should point to /proc/mounts so it can detect the / filesystem.

vi /etc/rc.d/rc.6 And add these two lines near the start:

  1. create the reboot flag so we get rebooted automatically

touch /reboot

vi /etc/rc.d/rc.M And add these two lines near the start:

  1. replace the mtab file with a link to /proc/mounts so OpenVZ can find the / filesystem

rm -f /etc/mtab ; ln -s /proc/mounts /etc/mtab


Blanking settings

Lastly, you'll want to delete or blank out a bunch of files so they start fresh when the VE is booted for its first time.

  1. stop all services

apachectl stop killall syslogd klogd udevd crond /etc/rc.d/rc.sendmail stop /etc/webmin/stop /etc/rc.d/rc.pgsql stop /etc/rc.d/rc.mysqld stop killall named proftpd killall xinetd

  1. blow away the network configuration with dummy strings for later replacement
  2. replace the IP address with __IPADDRESS_
  3. replace the netmask with __NETMASK__
  4. replace the GATEWAY with __GATEWAY__

vi /etc/rc.d/rc.inet1.conf

  1. disable the root and user accounts
  2. by changing the password for root and user to a ! character.

vi /etc/shadow

  1. refresh the 'locate' cache

/etc/cron.daily/slocate

  1. blank out the system logfiles

for logfile in \

   /var/log/messages /var/log/syslog /var/log/debug /var/log/secure \
   /var/log/maillog /var/log/spooler /var/log/proftpd.log /var/log/xinetd.log \
   /var/log/dmesg /var/log/faillog /var/log/lastlog /var/log/wtmp \
   /var/log/apache/access_log /var/log/apache/error_log \
   /var/log/webmin/miniserv.error /var/log/webmin/miniserv.pid

do cp /dev/null $logfile ; done rmdir /var/log/sa

  1. clear the SSH host key

rm -f /etc/ssh/ssh_host_*

  1. database server logfiles

rm -f /var/lib/mysql/*.err /var/lib/pgsql/logfile

  1. delete vi backup files, bash_history files, and other small application crud

unset HISTFILE find / -name '*~' \

   -o -name .bash_history \
   -o -name .gnupg \
   -o -name .lesshst \
   -o -name .viminfo \
   -o -name .rnd \
   -delete
  1. the junk under /tmp

rm -rf /tmp/*


Zipping it up into a cache image

A VE cache is just a tar.gz file of the entire filesystem, excluding some very dynamic stuff which gets populated by the OS at runtime anyway:

tar zcvf /tmp/HostGIS_Linux_4.2_64bit.tar.gz --exclude='/sys/*' --exclude='/proc/*' --exclude='/tmp/*' /