f4d17450 |
#!/bin/bash
#################################################
# Title: mk-install-iso #
# Date: 2014-11-26 #
# Version: 1.0 #
# Author: dthaluru@vmware.com #
# Options: #
#################################################
# Overview
# Generates a photon iso
# End
#
|
2f46569e |
set +x # disable hashall |
4d6a578d |
PRGNAME=${0##*/} # script name minus the path |
f4d17450 |
source config.inc # configuration parameters
source function.inc # commonn functions
LOGFILE=/var/log/"${PRGNAME}-${LOGFILE}" # set log file name
# Grab the name of the iso file
if [ $# -lt 2 ] |
85b82155 |
then
echo "Usage : " $0 " <output-iso-with-path> <rpms-path> <pkg-list-path>"
exit 1 |
f4d17450 |
fi
ISO_OUTPUT_NAME=$1 |
85b82155 |
RPMS_PATH=$2
PACKAGE_LIST_FILE=$3 |
4d6a578d |
RPM_LIST=$4 |
2f46569e |
STAGE_PATH=$5
ADDITIONAL_FILES_TO_COPY_FROM_STAGE=$6 |
07751fba |
LIVE_CD=$7 |
2cbd5a80 |
OUTPUT_DATA_PATH=$8 |
5d05cfcc |
PHOTON_COMMON_DIR=$(dirname "${PACKAGE_LIST_FILE}")
PACKAGE_LIST_FILE_BASE_NAME=$(basename "${PACKAGE_LIST_FILE}") |
f4d17450 |
#- Step 3 Setting up the boot loader |
b84da80d |
WORKINGDIR=${BUILDROOT}
BUILDROOT=${BUILDROOT}/photon-chroot |
f4d17450 |
|
4967065a |
cp -r BUILD_DVD/isolinux ${WORKINGDIR}/ |
adde0296 |
cp BUILD_DVD/isolinux/splash.png ${BUILDROOT}/installer/boot/. |
dc75e58c |
if [ "$LIVE_CD" = true ] ; then
mv ${WORKINGDIR}/isolinux/live-menu.cfg ${WORKINGDIR}/isolinux/menu.cfg
fi
|
4967065a |
cp sample_ks.cfg ${WORKINGDIR}/isolinux/ |
f4d17450 |
|
b84da80d |
find ${BUILDROOT} -name linux-[0-9]*.rpm | head -1 | xargs rpm2cpio | cpio -iv --to-stdout ./boot/vmlinuz* > ${WORKINGDIR}/isolinux/vmlinuz |
f4d17450 |
|
b84da80d |
rm -f ${BUILDROOT}/installer/*.pyc |
4967065a |
rm -rf ${BUILDROOT}/installer/BUILD_DVD |
182ad6e9 |
# Copy package list json files, dereference symlinks |
2cbd5a80 |
cp -rf -L $OUTPUT_DATA_PATH/*.json ${BUILDROOT}/installer/ |
f4d17450 |
#ID in the initrd.gz now is PHOTON_VMWARE_CD . This is how we recognize that the cd is actually ours. touch this file there. |
b84da80d |
touch ${WORKINGDIR}/PHOTON_VMWARE_CD |
f4d17450 |
# Step 4.5 Create necessary devices
mkfifo ${BUILDROOT}/dev/initctl
mknod ${BUILDROOT}/dev/ram0 b 1 0
mknod ${BUILDROOT}/dev/ram1 b 1 1
mknod ${BUILDROOT}/dev/ram2 b 1 2
mknod ${BUILDROOT}/dev/ram3 b 1 3
mknod ${BUILDROOT}/dev/sda b 8 0
#- Step 5 - Creating the boot script
mkdir -p ${BUILDROOT}/etc/systemd/scripts
# Step 6 create fstab
cp BUILD_DVD/fstab ${BUILDROOT}/etc/fstab
|
6860f77c |
mkdir -p ${BUILDROOT}/etc/yum.repos.d
cat >> ${BUILDROOT}/etc/yum.repos.d/photon-iso.repo <<EOF
[photon-iso]
name=VMWare Photon Linux 1.0(x86_64)
baseurl=file:///mnt/cdrom/RPMS
gpgkey=file:///etc/pki/rpm-gpg/VMWARE-RPM-GPG-KEY
gpgcheck=1
enabled=1
skip_if_unavailable=True
EOF
|
f4d17450 |
#- Step 7 - Create installer script |
07751fba |
if [ "$LIVE_CD" = false ] ; then |
f4d17450 |
cat >> ${BUILDROOT}/bin/bootphotoninstaller << EOF
#!/bin/bash |
b84da80d |
cd /installer |
182ad6e9 |
./isoInstaller.py --json-file=$PACKAGE_LIST_FILE_BASE_NAME 2> /var/log/installer && shutdown -r now |
f4d17450 |
/bin/bash
EOF
chmod 755 ${BUILDROOT}/bin/bootphotoninstaller
|
07751fba |
fi
|
b84da80d |
cat >> ${BUILDROOT}/init << EOF
mount -t proc proc /proc
/lib/systemd/systemd
EOF
chmod 755 ${BUILDROOT}/init
|
f4d17450 |
#adding autologin to the root user |
f1897db0 |
# and set TERM=linux for installer
sed -i "s/ExecStart.*/ExecStart=-\/sbin\/agetty --autologin root --noclear %I linux/g" ${BUILDROOT}/lib/systemd/system/getty@.service |
f4d17450 |
|
07751fba |
#- Step 7 - Create installer script
if [ "$LIVE_CD" = false ] ; then
sed -i "s/root:.*/root:x:0:0:root:\/root:\/bin\/bootphotoninstaller/g" ${BUILDROOT}/etc/passwd
fi |
f4d17450 |
|
b84da80d |
mkdir -p ${BUILDROOT}/mnt/photon-root/photon-chroot
rm -rf ${BUILDROOT}/RPMS |
4d6a578d |
|
c1a6582a |
run_command " echo ${RPMS_PATH}" "echo ${RPMS_PATH}" "${LOGFILE}" |
4d6a578d |
#cp -r ${RPMS_PATH} ${WORKINGDIR}/
(
cd ${RPMS_PATH}
mkdir ${WORKINGDIR}/RPMS
for rpm_name in $RPM_LIST; do |
c1a6582a |
if [ -f "$rpm_name" ]; then
cp --parent $rpm_name ${WORKINGDIR}/RPMS/; |
5d05cfcc |
fi |
4d6a578d |
done
) |
f4d17450 |
|
2f46569e |
# Work in sub-shell using ( ... ) to come back to original folder.
(
cd $STAGE_PATH
for file_name in $ADDITIONAL_FILES_TO_COPY_FROM_STAGE; do
if [ -n "$file_name" ]; then
cp $file_name ${WORKINGDIR}/;
fi
done
)
|
f4d17450 |
#creating rpm repo in cd.. |
b84da80d |
createrepo --database ${WORKINGDIR}/RPMS |
f4d17450 |
|
4f7dcd46 |
repodatadir=${WORKINGDIR}/RPMS/repodata
if [ -d $repodatadir ]; then
pushd $repodatadir
metaDataFile=`find -type f -name "*primary.xml.gz"`
ln -sfv $metaDataFile primary.xml.gz
popd
fi
|
b84da80d |
rm -rf ${BUILDROOT}/LOGS |
f4d17450 |
|
07751fba |
if [ "$LIVE_CD" = false ] ; then
# Cleaning up
#Remove our rpm database as it fills up the ramdisk
rm -rf ${BUILDROOT}/home/*
rm -rf ${BUILDROOT}/var/lib/rpm |
b2a012df |
|
07751fba |
# Remove the boot directory
rm -rf ${BUILDROOT}/boot |
b2a012df |
|
07751fba |
#Remove the include files.
rm -rf ${BUILDROOT}/usr/include |
b2a012df |
|
adde0296 |
rm ${BUILDROOT}/lib64/libmvec*
rm ${BUILDROOT}/usr/sbin/grub2-bios-setup
rm ${BUILDROOT}/usr/sbin/grub2-probe
rm ${BUILDROOT}/usr/sbin/grub2-macbless
rm ${BUILDROOT}/usr/sbin/grub2-reboot
rm ${BUILDROOT}/usr/sbin/grub2-sparc64-setup
rm ${BUILDROOT}/usr/sbin/sln
rm ${BUILDROOT}/usr/bin/grub2-mkrescue
rm ${BUILDROOT}/usr/bin/grub2-fstest
rm ${BUILDROOT}/usr/bin/grub2-syslinux2cfg
rm ${BUILDROOT}/usr/bin/grub2-mkstandalone
rm ${BUILDROOT}/usr/bin/localedef
rm ${BUILDROOT}/usr/bin/systemd-nspawn
rm ${BUILDROOT}/usr/bin/systemd-analyze
rm -rf ${BUILDROOT}/usr/lib64/gconv
rm -rf ${BUILDROOT}/usr/lib/python2.7/lib2to3
rm -rf ${BUILDROOT}/usr/lib/python2.7/lib-tk
rm -rf ${BUILDROOT}/usr/lib/python2.7/ensurepip
rm -rf ${BUILDROOT}/usr/lib/python2.7/encoding
rm -rf ${BUILDROOT}/usr/lib/python2.7/distutils
rm -rf ${BUILDROOT}/usr/lib/python2.7/pydoc_data
rm -rf ${BUILDROOT}/usr/lib/python2.7/idlelib
rm -rf ${BUILDROOT}/usr/lib/python2.7/unittest
|
07751fba |
# TODO: mbassiouny, Find a clean way to do that
for i in `ls ${BUILDROOT}/usr/share/`; do
if [ $i != 'terminfo' -a $i != 'cracklib' -a $i != 'grub' ]; then
rm -rf ${BUILDROOT}/usr/share/$i
fi
done
fi |
b84da80d |
|
f0c84d68 |
# Set password max days to 99999 (disable aging)
chage -R ${BUILDROOT} -M 99999 root
|
b84da80d |
# Generate the intird |
f4d17450 |
pushd $BUILDROOT |
b84da80d |
(find . | cpio -o -H newc --quiet | gzip -9 ) > ${WORKINGDIR}/isolinux/initrd.img
popd
rm -rf $BUILDROOT
#Step 9 Generate the ISO!!!!
pushd $WORKINGDIR |
f4d17450 |
mkisofs -R -l -L -D -b isolinux/isolinux.bin -c isolinux/boot.cat \
-no-emul-boot -boot-load-size 4 -boot-info-table -V "PHOTON_$(date +%Y%m%d)" \ |
b84da80d |
$WORKINGDIR >$ISO_OUTPUT_NAME |
f4d17450 |
popd |