/usr/bin/ovz-install is in cobbler 2.4.1-0ubuntu2.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 | #!/usr/bin/env bash
## OpenVZ container-type virtualization installation functions.
##
## Copyright 2012 Sergey Podushkin <psv AT tncc.ru>
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
## 02110-1301 USA
##
PROFILE_NAME=$1
KICKSTART_URL=$2
ROOTDIR=$3
if [ -z $PROFILE_NAME -o -z $ROOTDIR -o -z $KICKSTART_URL ] ; then
echo "Some arguments missing!"
echo "Usage: $0 system_name kickstart_url private_dir"
echo "Exiting..."
exit 1
fi
PATH=/bin:/sbin:/usr/bin:/usr/sbin
KICKSTART="/tmp/$PROFILE_NAME-kickstart.cfg"
# get the kickstart
wget $KICKSTART_URL -q -O $KICKSTART
# get the root password hash from kickstart
ROOTPW=`cat $KICKSTART| awk '/^rootpw/{ print $NF }'`
# what shell will be used for post-install script? get it from kickstart
POST_INSTALL_SHELL=`cat $KICKSTART | grep '^%post.*--interpreter' | sed -n 's/^.*--interpreter \([^ ][^ ]*\).*/\1/;p'`
# if not defined in kickstart, then use /bin/sh
[ -z $POST_INSTALL_SHELL ] && POST_INSTALL_SHELL="/bin/sh"
# where to store post-install script
POST_INSTALL_SCRIPT="/tmp/$PROFILE_NAME-post-install"
# add postinstall script from kickstart
cat $KICKSTART | sed -n '0,/\%post/d;p' >$POST_INSTALL_SCRIPT
# get list of services that should be enabled after installation (anaconda-like behaviour)
SERVICES_ENABLED=`cat $KICKSTART| grep '^services.*--enabled' | sed 's/^services.*--enabled//; s/,/ /g'`
# get list of services that should be disabled after installation (anaconda-like behaviour)
SERVICES_DISABLED=`cat $KICKSTART| grep '^services.*--disabled' | sed 's/^services.*--disabled//; s/,/ /g'`
# some our anaconda-like actions before postinstall script execution
SERVICES_SCRIPT="/tmp/$PROFILE_NAME-services.sh"
cat /dev/null >$SERVICES_SCRIPT
# disable+enable service as directed in kickstart options
# first disable services
for serv in $SERVICES_DISABLED ; do
echo chkconfig --level 345 $serv off >>$SERVICES_SCRIPT
done
# then enable services
for serv in $SERVICES_ENABLED ; do
echo chkconfig --level 345 $serv on >>$SERVICES_SCRIPT
done
# temporary yum config
YUM_CONFIG="/tmp/$PROFILE_NAME-yum.cfg"
echo -e "[main]\ncachedir=/var/cache/yum/\$basearch/\$releasever\nkeepcache=0\ndebuglevel=2\nlogfile=/var/log/yum.log\nexactarch=1\nobsoletes=1\ngpgcheck=0\nplugins=1\ndistroverpkg=centos-release\nreposdir=/dev/null\n" >$YUM_CONFIG
echo -e "groupremove_leaf_only=1\ngroup_package_types=mandatory\ntsflags=nodocs\n" >>$YUM_CONFIG
# --ignoremissing processing
cat $KICKSTART| grep '\-\-ignoremissing'>/dev/null
if [ $? -eq 0 ] ; then echo -e "skip_broken=1\n" >>$YUM_CONFIG ; fi
# just new line
echo >>$YUM_CONFIG
# base package set we get from kickstart's url option (this option used only for http/ftp install, that is in use by cobbler, if kickstart use other method we'll FAIL!!!)
BASE_REPO_URL=`cat $KICKSTART| grep ^url | sed 's/^url.*--url=//'`
# put in to our config
echo -e "[base-os]\nname=base-os\nbaseurl=$BASE_REPO_URL\nenabled=1\npriority=1\ngpgcheck=0\n\n" >>$YUM_CONFIG
# get additional repos from kickstart and put it to config too
cat $KICKSTART | grep ^repo | \
sed 's/^repo\ //; s/--//g' | \
while read repo_name repo_url ; do
repo_tag=`echo $repo_name | sed 's/name=//'`
echo -e "[$repo_tag]\n$repo_name\n$repo_url\nenabled=1\npriority=99\ngpgcheck=0\n" >>$YUM_CONFIG
done
# packages we don't need to install (but included in installed groups)
EXCLUDED_PKGS="selinux-policy-targeted kernel* *firmware* b43*"
# packages we want to be installed, besides of listed in kickstart
PKGS_LIST="vim-minimal ssh-clients openssh-server logrotate"
# temporary yum script
YUM_SCRIPT="/tmp/$PROFILE_NAME-yum.yum"
cp /dev/null $YUM_SCRIPT
(echo config assumeyes True
echo config gpgcheck False
echo install $PKGS_LIST
) >>$YUM_SCRIPT
if [ -n "$EXCLUDED_PKGS" ] ; then echo config exclude \"$EXCLUDED_PKGS\" >>$YUM_SCRIPT ; fi
cat $KICKSTART| awk '/^\%packages/,/^\%post/{ print $0 }'|egrep -v '^#|^$|^%' | \
while read line ; do
# if package name can start with '-' sign, that means we have to exclude it
ACTION="install"
IS_GROUP=""
echo $line|grep '^-'>/dev/null
if [ $? -eq 0 ] ; then
line=`echo $line|sed 's/^-//'`
ACTION="remove"
fi
echo $line|grep '^@' >/dev/null
# if name starts with @ - it's a group
if [ $? -eq 0 ] ; then
line=`echo $line|sed 's/^@//'`
IS_GROUP="group"
fi
line=`echo $line | sed 's/^\s*//'`
echo ${IS_GROUP}${ACTION} \"$line\" >>$YUM_SCRIPT
done
cat $KICKSTART| grep '\-\-nobase'>/dev/null
if [ $? -eq 0 ] ; then echo groupremove base >>$YUM_SCRIPT ; fi
echo run >>$YUM_SCRIPT
# install all packages in one pass by using yum shell
#### THIS IS LONG-RUNNING TASK! ######
echo Start installing packages
yum shell --quiet --config=$YUM_CONFIG --installroot=$ROOTDIR $YUM_SCRIPT
## >/dev/null 2>&1
# some optimization
yum remove kernel kernel-firmware dracut dracut-kernel dracut-network fcoe-utils libdrm lldpad plymouth -y --quiet --config=$YUM_CONFIG --installroot=$ROOTDIR
echo Packages installed
# remove all *.repo files, cobbler will install it's own repo-file with needed repos
rm -f $ROOTDIR/etc/yum.repos.d/*.repo
# move services setup script in container root, to be reachable inside of chroot
mv $SERVICES_SCRIPT $ROOTDIR/$SERVICES_SCRIPT
# turn off and on services in chroot
echo Disabling and enabling services as needed
chroot $ROOTDIR /bin/bash $SERVICES_SCRIPT
# move postinstall script in container root, to be reachable inside of chroot
mv $POST_INSTALL_SCRIPT $ROOTDIR/$POST_INSTALL_SCRIPT
# run the postinstall actions in chroot
echo Perform post-installation actions
(chroot $ROOTDIR $POST_INSTALL_SHELL $POST_INSTALL_SCRIPT )>/dev/null 2>&1
# tune the installations to be suitable for OpenVZ as environment
echo Make the tree container-ready
cd $ROOTDIR
# remove unneeded upstart scripts
rm -f $ROOTDIR/etc/init/control-alt-delete.conf
rm -f $ROOTDIR/etc/init/plymouth-shutdown.conf
rm -f $ROOTDIR/etc/init/prefdm.conf
rm -f $ROOTDIR/etc/init/quit-plymouth.conf
rm -f $ROOTDIR/etc/init/rcS-sulogin.conf
rm -f $ROOTDIR/etc/init/serial.conf
rm -f $ROOTDIR/etc/init/start-ttys.conf
rm -f $ROOTDIR/etc/init/tty.conf
sed -i -e 's/^console/#console/' $ROOTDIR/etc/init/rc.conf
sed -i -e 's/^console/#console/' $ROOTDIR/etc/init/rcS.conf
# tune sshd
sed -i -e 's/GSSAPIAuthentication\ yes/GSSAPIAuthentication\ no/g' $ROOTDIR/etc/ssh/sshd_config
# turn off SELinux
mkdir -p $ROOTDIR/etc/selinux
echo SELINUX=disabled>$ROOTDIR/etc/selinux/config
# we use ! as the delimiter for sed, because $ROOTPW hash is full of weird signs ;)
sed -i -e "s!root:.:!root:$ROOTPW:!" $ROOTDIR/etc/shadow
# who needs it?!
#echo "PS1='[\u@\h \W]\$'" >> /etc/profile
# link mtab from outer space
[ -f $ROOTDIR/etc/mtab ] && rm $ROOTDIR/etc/mtab
ln -s /proc/mounts etc/mtab
# some point to fstab
echo "none /dev/pts devpts rw,gid=5,mode=620 0 0">$ROOTDIR/etc/fstab
# here is plain file dev/null, so we remove it
rm -f $ROOTDIR/dev/null
# create neccessary device files
for dir in $ROOTDIR/dev $ROOTDIR/etc/udev/devices ; do
/sbin/MAKEDEV -d $dir -x {p,t}ty{a,p}{0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f} console core full kmem kmsg mem null port ptmx random urandom zero ram0
ln -s /proc/self/fd $dir/fd
ln -s /proc/self/fd/2 $dir/stderr
ln -s /proc/self/fd/0 $dir/stdin
ln -s /proc/self/fd/1 $dir/stdout
done
# ajust permissions
chmod 1777 $ROOTDIR/tmp
chmod 1777 $ROOTDIR/var/tmp
echo All done
exit 0
|