mirror of
https://github.com/xcat2/xcat-core.git
synced 2025-05-29 17:23:08 +00:00
207 lines
10 KiB
Plaintext
Executable File
207 lines
10 KiB
Plaintext
Executable File
# Build the xCAT-genesis-base rpm on a host system.
|
|
# Option 1: install the xCAT-genesis-builder rpm (that includes this file) on a system installed with
|
|
# the distro you want to use to build xCAT-genesis-base.
|
|
# Option 2: untar the root file system of the distro you want to use and then chroot into it and copy
|
|
# this whole dir into it somewhere (like /tmp).
|
|
# Then run this script. The optional 1st arg should be mcp if you are building against mcp.
|
|
|
|
# Currently, *Fedora 23* is the only OS supported to build genesis-base for ppc64, and Centos 6.5 for x86_64
|
|
|
|
HOSTOS="$1"
|
|
DIR=`dirname $0`
|
|
#DIR=`realpath $DIR`
|
|
DIR=`readlink -f $DIR`
|
|
BUILDARCH=`uname -m`
|
|
|
|
#For Openpower
|
|
if [ $BUILDARCH = "ppc64le" ]; then
|
|
BUILDARCH="ppc64"
|
|
fi
|
|
|
|
# For xcat-genesis-base-ppc64, we need to update mlx4-en driver for Mellanox ethernet nics.
|
|
# IF you are sure you have installed newer driver on the build server you can use 'buildrpm -y' to skip the nodification
|
|
if [ -z $1 ]; then
|
|
HOSTOS="fedora23"
|
|
fi
|
|
if [ $BUILDARCH = 'ppc64' -a $HOSTOS != 'mcp' -a $HOSTOS != '-y' ]; then
|
|
echo "The steps below is used to installed mlnx driver 3.2-1, if you are sure you have it or newer driver, pls use \"-y\" to skip!"
|
|
echo "1. Install OS related packages"
|
|
echo " yum install kernel-devel-`uname -r`"
|
|
echo " yum install kernel-headers-`uname -r`"
|
|
echo " yum install gcc-c++"
|
|
echo "2. Download Mellanox EN Driver for Linux from http://www.mellanox.com/downloads/Drivers/mlnx-en-3.2-1.0.1.1.tgz"
|
|
echo "3. Extract it and run ./install.sh from the extracted directory"
|
|
echo " tar -xvf mlnx-en-3.2-1.0.1.1.tgz"
|
|
echo " ./mlnx-en-3.2-1.0.1.1/install.sh"
|
|
echo "4. Check whether the mlx4 driver is updated"
|
|
echo " modprobe mlx4-en"
|
|
echo " modinfo mlx4-en | grep version"
|
|
echo " version: 3.2-1.0.1.1 (31 Jan 2016)"
|
|
echo "5. Once the steps above done, run \"$0 -y\" to build xCAT-genesis-base-ppc64"
|
|
exit 0
|
|
fi
|
|
|
|
|
|
# get the input files for dracut in the right place
|
|
# Fedora 20 ppc64 uses /usr/lib/dracut/modules.d
|
|
# CentOS 7 probably uses /usr/lib/dracut/modules.d also
|
|
if [ -e "/usr/share/dracut/modules.d" ]
|
|
then
|
|
DRACUTMODDIR=/usr/share/dracut/modules.d/97xcat
|
|
else
|
|
DRACUTMODDIR=/usr/lib/dracut/modules.d/97xcat
|
|
fi
|
|
|
|
mkdir -p $DRACUTMODDIR
|
|
cp $DIR/* $DRACUTMODDIR
|
|
|
|
# Remove the ipr(IBM Power RAID) stuff when building on x86_64
|
|
if [ $BUILDARCH = "x86_64" ]; then
|
|
sed -i 's/dracut_install \/lib64\/libform.so.5//' $DRACUTMODDIR/install
|
|
sed -i 's/\/lib\/libtinfo.so.5.7/\/lib64\/libtinfo.so.5.7/' $DRACUTMODDIR/install
|
|
sed -i 's/\/lib64\/libpanel.so.5//' $DRACUTMODDIR/install
|
|
sed -i 's/\/lib64\/libmenu.so.5//' $DRACUTMODDIR/install
|
|
sed -i 's/\/lib64\/libsysfs.so.2//' $DRACUTMODDIR/install
|
|
sed -i 's/\/usr\/sbin\/iprconfig//' $DRACUTMODDIR/install
|
|
sed -i '/hwdb.bin/ d' $DRACUTMODDIR/install
|
|
sed -i 's/instmods ipr//' $DRACUTMODDIR/installkernel
|
|
fi
|
|
if [ "$HOSTOS" = "mcp" ]; then
|
|
#Special handlings for MCP PPC64 platform building.
|
|
if [ $BUILDARCH = "ppc64" ]; then
|
|
sed -i 's/dracut_install efibootmgr//' $DRACUTMODDIR/install
|
|
sed -i 's/dracut_install dmidecode \/usr\/lib64\/libstdc++.so.5//' $DRACUTMODDIR/install
|
|
sed -i 's/dmidecode//' $DRACUTMODDIR/install
|
|
sed -i 's/\/lib\/ld-linux.so.2/\/usr\/lib64\/ld-2.17.so/' $DRACUTMODDIR/install
|
|
sed -i 's/\/lib64\/libsysfs.so.2//' $DRACUTMODDIR/install
|
|
sed -i 's/\/usr\/sbin\/iprconfig//' $DRACUTMODDIR/install
|
|
else
|
|
sed -i 's/\/lib\/ld-linux.so.2/\/usr\/lib64\/ld-linux-x86-64.so.2/' $DRACUTMODDIR/install
|
|
fi
|
|
sed -i 's/mkfs.btrfs//' $DRACUTMODDIR/install
|
|
sed -i 's/\/etc\/redhat-release/\/etc\/base-release \/etc\/system-release/' $DRACUTMODDIR/install
|
|
sed -i 's/btrfs//' $DRACUTMODDIR/installkernel
|
|
|
|
sed -i 's/\/usr\/bin\/basename/\/bin\/basename/' $DRACUTMODDIR/install
|
|
|
|
sed -i 's/\/lib64\/libnss_dns-2.12.so/\/usr\/lib64\/libnss_dns-2.17.so/' $DRACUTMODDIR/install
|
|
sed -i 's/\/lib64\/libnss_dns.so.2/\/usr\/lib64\/libnss_dns.so.2/' $DRACUTMODDIR/install
|
|
sed -i 's/\/lib\/libc.so.6/\/usr\/lib64\/libc.so.6/' $DRACUTMODDIR/install
|
|
sed -i 's/\/lib\/libdl.so.2/\/usr\/lib64\/libdl.so.2/' $DRACUTMODDIR/install
|
|
sed -i 's/\/lib\/libm.so.6/\/usr\/lib64\/libm.so.6/' $DRACUTMODDIR/install
|
|
sed -i 's/\/usr\/lib\/libstdc++.so.6.0.13/\/usr\/lib64\/libstdc++.so.6.0.19/' $DRACUTMODDIR/install
|
|
sed -i 's/\/usr\/lib64\/libstdc++.so.5//' $DRACUTMODDIR/install
|
|
sed -i 's/\/lib\/libpthread.so.0/\/usr\/lib64\/libpthread.so.0/' $DRACUTMODDIR/install
|
|
sed -i 's/\/lib\/libncurses.so.5.7/\/usr\/lib64\/libncurses.so.5.9/' $DRACUTMODDIR/install
|
|
sed -i 's/\/lib\/libgcc_s.so.1/\/usr\/lib64\/libgcc_s.so.1/' $DRACUTMODDIR/install
|
|
sed -i 's/\/lib\/libtinfo.so.5.7/\/usr\/lib64\/libtinfo.so.5.9/' $DRACUTMODDIR/install
|
|
sed -i 's/\/usr\/lib64\/libsasl2.so.2/\/usr\/lib64\/libsasl2.so.3/' $DRACUTMODDIR/install
|
|
|
|
sed -i 's/\/lib\/terminfo\/l\/linux/\/usr\/share\/terminfo\/l\/linux/g' $DRACUTMODDIR/install
|
|
sed -i 's/\/lib\/terminfo\/v\/vt100/\/usr\/share\/terminfo\/v\/vt100/g' $DRACUTMODDIR/install
|
|
|
|
# these are needed for sysclone, but are not yet in mcp
|
|
sed -i 's/ bc//' $DRACUTMODDIR/install
|
|
sed -i 's/ mkdosfs//' $DRACUTMODDIR/install
|
|
sed -i 's/ rsync//' $DRACUTMODDIR/install
|
|
sed -i 's/ kexec//' $DRACUTMODDIR/install
|
|
sed -i 's/ klogd//' $DRACUTMODDIR/install
|
|
sed -i 's/ mdadm//' $DRACUTMODDIR/install
|
|
sed -i 's/ mkfs\.xfs//' $DRACUTMODDIR/install
|
|
sed -i 's/ xfs_db//' $DRACUTMODDIR/install
|
|
sed -i 's/ mkreiserfs//' $DRACUTMODDIR/install
|
|
sed -i 's/ reiserfstune//' $DRACUTMODDIR/install
|
|
sed -i 's/ vconfig//' $DRACUTMODDIR/install
|
|
sed -i 's/ killall//' $DRACUTMODDIR/install
|
|
|
|
# These timezone files are not available in the latest mcp build
|
|
sed -i 's/dracut_install \/usr\/share\/zoneinfo\/posix\/Asia\/Riyadh87//' $DRACUTMODDIR/install
|
|
sed -i 's/dracut_install \/usr\/share\/zoneinfo\/posix\/Asia\/Riyadh88//' $DRACUTMODDIR/install
|
|
sed -i 's/dracut_install \/usr\/share\/zoneinfo\/posix\/Asia\/Riyadh89//' $DRACUTMODDIR/install
|
|
sed -i 's/dracut_install \/usr\/share\/zoneinfo\/posix\/Mideast\/Riyadh87//' $DRACUTMODDIR/install
|
|
sed -i 's/dracut_install \/usr\/share\/zoneinfo\/posix\/Mideast\/Riyadh88//' $DRACUTMODDIR/install
|
|
sed -i 's/dracut_install \/usr\/share\/zoneinfo\/posix\/Mideast\/Riyadh89//' $DRACUTMODDIR/install
|
|
|
|
# For ppc64 platform, needs to remove some files,
|
|
# # and some files are in different directories
|
|
elif [ $BUILDARCH = "ppc64" ]; then
|
|
sed -i 's/dracut_install efibootmgr//' $DRACUTMODDIR/install
|
|
sed -i 's/ dmidecode//' $DRACUTMODDIR/install
|
|
sed -i 's/\/lib\/libncurses.so.5.7/\/lib64\/libncurses.so.5.7/' $DRACUTMODDIR/install
|
|
sed -i 's/\/usr\/lib\/libstdc++.so.6.0.13/\/usr\/lib64\/libstdc++.so.6.0.13/' $DRACUTMODDIR/install
|
|
sed -i 's/\/lib\/libgcc_s.so.1/\/lib64\/libgcc_s.so.1/' $DRACUTMODDIR/install
|
|
sed -i 's/\/lib\/libtinfo.so.5.7/\/lib64\/libtinfo.so.5.7/' $DRACUTMODDIR/install
|
|
# following changes are required on Fedora 20 ppc64
|
|
# sed -i 's/\/lib64\/libnss_dns-2.12.so/\/lib64\/libnss_dns-2.18.so/' $DRACUTMODDIR/install
|
|
# following changes are required on Fedora 23 ppc64
|
|
sed -i 's/\/lib64\/libnss_dns-2.12.so/\/lib64\/libnss_dns-2.22.so/' $DRACUTMODDIR/install
|
|
sed -i 's/\/lib\/libc.so.6/\/lib64\/libc.so.6/' $DRACUTMODDIR/install
|
|
# following changes are required on Fedora 23 ppc64
|
|
#sed -i 's/\/lib\/ld-linux.so.2/\/lib64\/ld-2.18.so/' $DRACUTMODDIR/install
|
|
sed -i 's/\/lib\/ld-linux.so.2/\/lib64\/ld-2.22.so/' $DRACUTMODDIR/install
|
|
sed -i 's/\/lib\/libdl.so.2/\/lib64\/libdl.so.2/' $DRACUTMODDIR/install
|
|
sed -i 's/\/lib\/libm.so.6/\/lib64\/libm.so.6/' $DRACUTMODDIR/install
|
|
sed -i 's/\/lib\/libpthread.so.0/\/lib64\/libpthread.so.0/' $DRACUTMODDIR/install
|
|
sed -i 's/\/lib64\/libncurses.so.5.7/\/lib64\/libncurses.so.5.9/' $DRACUTMODDIR/install
|
|
# following changes are required on Fedora 22 ppc64
|
|
#sed -i 's/\/usr\/lib64\/libstdc++.so.6.0.13/\/usr\/lib64\/libstdc++.so.6.0.19/' $DRACUTMODDIR/install
|
|
sed -i 's/\/usr\/lib64\/libstdc++.so.6.0.13/\/usr\/lib64\/libstdc++.so.6.0.21/' $DRACUTMODDIR/install
|
|
sed -i 's/\/lib64\/libtinfo.so.5.7/\/lib64\/libtinfo.so.5.9/' $DRACUTMODDIR/install
|
|
sed -i 's/\/usr\/lib64\/libsasl2.so.2/\/usr\/lib64\/libsasl2.so.3/' $DRACUTMODDIR/install
|
|
#sed -i 's/\/lib64\/libnss_dns-2.12.so/\/lib64\/libnss_dns-2.18.so/' $DRACUTMODDIR/install
|
|
sed -i 's/\/lib\/terminfo\/l\/linux/\/usr\/share\/terminfo\/l\/linux/g' $DRACUTMODDIR/install
|
|
sed -i 's/\/lib\/terminfo\/v\/vt100/\/usr\/share\/terminfo\/v\/vt100/g' $DRACUTMODDIR/install
|
|
fi
|
|
|
|
mkdir -p /tmp/xcatgenesis.$$/opt/xcat/share/xcat/netboot/genesis/$BUILDARCH/fs
|
|
|
|
# run dracut
|
|
if [ "$HOSTOS" = "mcp" ]; then
|
|
KPATH=`/bin/ls -d /lib/modules/*`
|
|
KERNELVERSION=`basename $KPATH`
|
|
echo Creating the initramfs in /tmp/xcatgenesis.$$.rfs using dracut and kernel $KERNELVERSION ...
|
|
else
|
|
echo Creating the initramfs in /tmp/xcatgenesis.$$.rfs using dracut ...
|
|
fi
|
|
|
|
# On Fedora 20 ppc64, dracut uses host-only mode by default
|
|
if [ $BUILDARCH = "ppc64" ]; then
|
|
dracut -m "xcat base" -N -f /tmp/xcatgenesis.$$.rfs $KERNELVERSION
|
|
else
|
|
dracut -m "xcat base" -f /tmp/xcatgenesis.$$.rfs $KERNELVERSION
|
|
fi
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "ERROR - creating the initramfs, please correct the issues and try again"
|
|
exit 1
|
|
fi
|
|
|
|
echo Expanding the initramfs into /tmp/xcatgenesis.$$/opt/xcat/share/xcat/netboot/genesis/$BUILDARCH/fs ...
|
|
cd /tmp/xcatgenesis.$$/opt/xcat/share/xcat/netboot/genesis/$BUILDARCH/fs
|
|
zcat /tmp/xcatgenesis.$$.rfs|cpio -dumi
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "ERROR - expanding the initramfs, please correct the issues and try again"
|
|
exit 1
|
|
fi
|
|
|
|
# add the kernel
|
|
if [ "$HOSTOS" = "mcp" ]; then
|
|
echo Adding kernel /boot/vmlinuz-* ...
|
|
cp /boot/vmlinuz-* /tmp/xcatgenesis.$$/opt/xcat/share/xcat/netboot/genesis/$BUILDARCH/kernel
|
|
else
|
|
echo Adding kernel /boot/vmlinuz-$BUILDARCH ...
|
|
cp /boot/vmlinuz-`uname -r` /tmp/xcatgenesis.$$/opt/xcat/share/xcat/netboot/genesis/$BUILDARCH/kernel
|
|
fi
|
|
cd -
|
|
|
|
# create tar file
|
|
echo Tarring /tmp/xcatgenesis.$$/opt into ~/rpmbuild/SOURCES/xCAT-genesis-base-$BUILDARCH.tar.bz2 ...
|
|
cd /tmp/xcatgenesis.$$
|
|
tar jcf ~/rpmbuild/SOURCES/xCAT-genesis-base-$BUILDARCH.tar.bz2 opt
|
|
|
|
# build the rpm
|
|
echo Building xCAT-genesis-base rpm from ~/rpmbuild/SOURCES/xCAT-genesis-base-$BUILDARCH.tar.bz2 and $DIR/xCAT-genesis-base.spec ...
|
|
rpmbuild -ba $DIR/xCAT-genesis-base.spec
|
|
rm -rf $DRACUTMODDIR
|