#!/bin/bash
#
# MKINITRD-MOL -- This program makes initial ramdisk image for Make One Linux
# Copyright (C) 2005-2006 Keicho Kondo <dgel@users.sourceforge.jp>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
#
# 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#

## === Setup Environment === ##
## Set path ##
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

## Read molmakerc ##
RCFILE="/etc/mol/molmakerc"
if [ -f "${RCFILE}" ]
then
	. "${RCFILE}"
else
	echo "Cannot find molmakerc file!"
	exit 1
fi

## Read options ##
case "$*" in
	# Help
	*--help*)
	echo "MKINITRD-MOL (Make One Linux) ${MOLVERSION}"
	echo " (C)2005-2006 Keicho Kondo <dgel@users.sourceforge.jp>"
	echo
	echo "This program makes initial ramdisk image for Make One Linux."
	echo "Usage: mkinitrd-mol [option]"
	echo "   --clean         : Clean up files made by this script"
	echo "   --help          : Show this help"
	echo "   --version       : Show version and notice"
	echo
	exit 0 ;;
	# Version
	*--version*)
	echo "MKINITRD-MOL (Make One Linux) ${MOLVERSION}"
	echo "Written by Keicho Kondo."
	echo
	echo "Copyright (C) 2005-2006 Keicho Kondo."
	echo "This is free software; see the source for copying conditions.  There is NO"
	echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
	echo
	exit 0 ;;
	# Clean up prepared files
	*--clean*)
	echo -n "${BLUE}Removing ${MAGENTA}initial ramdisk image${NORMAL}"
	rm -rf ${BUILD_ROOT}/initrd               && chkok
	rm -f  ${BUILD_ROOT}/initrd.img           && chkok
	rm -rf ${BUILD_ROOT}/patch                && chkok
	if [ "${COPY_INITRD_TO_BOOTDIR}" = "yes" ]
	then
		rm -f  /boot/initrd-mol-${MOLVERSION}.img && chkok
		grubby --remove-kernel TITLE="${OLTITLE}" && chkok
		grubby --remove-kernel TITLE="${ROTITLE}" && chkok
	fi
	rm -f  ${BUILD_ROOT}/mkinitrd-mol.flag    && chkok
	echo "${GREEN}Done${NORMAL}"
	exit 0 ;;
esac

## Check flag ##
if [ -f "${BUILD_ROOT}/mkinitrd-mol.flag" ]
then
	echo "Warning: First, please execute this script with --clean option."
	exit 1
fi


## === Start === ##
echo "${MAGENTA}mkinitrd-mol Starting${NORMAL}"

## / ##
# Making initrd directory
echo -n "${BLUE}Making initrd directory${NORMAL}"
mkdir -p ${BUILD_ROOT}/initrd         && chkok || chkfail
mkdir -p ${BUILD_ROOT}/initrd/MOL     && chkok || chkfail
mkdir -p ${BUILD_ROOT}/initrd/MOL+    && chkok || chkfail
mkdir -p ${BUILD_ROOT}/initrd/exec    && chkok || chkfail
mkdir -p ${BUILD_ROOT}/initrd/media   && chkok || chkfail
mkdir -p ${BUILD_ROOT}/initrd/mnt/floppy && chkok || chkfail
mkdir -p ${BUILD_ROOT}/initrd/proc    && chkok || chkfail
[ -d /selinux ] && mkdir -p ${BUILD_ROOT}/initrd/selinux && chkok # 0.6.0
[ -d /net     ] && mkdir -p ${BUILD_ROOT}/initrd/net     && chkok # 0.6.0
[ -d /misc    ] && mkdir -p ${BUILD_ROOT}/initrd/misc    && chkok # 0.6.0
mkdir -p ${BUILD_ROOT}/initrd/sys     && chkok || chkfail
#mkdir -p ${BUILD_ROOT}/initrd/sysroot && chkok || chkfail
mkdir -p ${BUILD_ROOT}/initrd/BASE && chkok || chkfail # 0.6.0
ln -sf /MOL/bin  ${BUILD_ROOT}/initrd/bin  && chkok || chkfail
ln -sf /MOL/boot ${BUILD_ROOT}/initrd/boot && chkok || chkfail
ln -sf /MOL/lib  ${BUILD_ROOT}/initrd/lib  && chkok || chkfail
ln -sf /MOL/opt  ${BUILD_ROOT}/initrd/opt  && chkok || chkfail
ln -sf /MOL/sbin ${BUILD_ROOT}/initrd/sbin && chkok || chkfail
ln -sf /MOL/srv  ${BUILD_ROOT}/initrd/srv  && chkok || chkfail
ln -sf /MOL/usr  ${BUILD_ROOT}/initrd/usr  && chkok || chkfail
touch ${BUILD_ROOT}/initrd/fastboot && chkok || chkfail
echo "${GREEN}Done${NORMAL}"

## /exec ##
# Copying executable files to initrd directory
echo -n "${BLUE}Copying executable files to initrd directory${NORMAL}"
cp -a ${LIBEXECDIR}/linuxrc       ${BUILD_ROOT}/initrd/      && chkok || chkfail
#cp -a ${LIBEXECDIR}/autosetup-mol ${BUILD_ROOT}/initrd/exec/ && chkok || chkfail
cp -a ${LIBEXECDIR}/halt-mol      ${BUILD_ROOT}/initrd/exec/ && chkok || chkfail # 0.6.0
cp -a ${LIBEXECDIR}/final.sh      ${BUILD_ROOT}/initrd/exec/ && chkok || chkfail # 0.6.0
#cp -a ${LIBEXECDIR}/xsetup-mol    ${BUILD_ROOT}/initrd/exec/ && chkok || chkfail
cp -a ${XSETUP}                   ${BUILD_ROOT}/initrd/exec/ && chkok || chkfail
cp -a ${DDCXINFO}                 ${BUILD_ROOT}/initrd/exec/ && chkok || chkfail
cp -a ${HWSETUP}                  ${BUILD_ROOT}/initrd/exec/ && chkok || chkfail
cp -a ${BUSYBOX}                  ${BUILD_ROOT}/initrd/exec/ && chkok || chkfail
cp -a /sbin/init                  ${BUILD_ROOT}/initrd/exec/ && chkok || chkfail # 0.6.0
ln -sf busybox-mol ${BUILD_ROOT}/initrd/exec/busybox && chkok || chkfail
ln -sf busybox-mol "${BUILD_ROOT}/initrd/exec/["          && chkok || chkfail # 0.6.0
ln -sf busybox-mol "${BUILD_ROOT}/initrd/exec/[["         && chkok || chkfail # 0.6.0
ln -sf busybox-mol "${BUILD_ROOT}/initrd/exec/ash"        && chkok || chkfail # 0.6.0
ln -sf busybox-mol "${BUILD_ROOT}/initrd/exec/awk"        && chkok || chkfail # 0.6.0
ln -sf busybox-mol "${BUILD_ROOT}/initrd/exec/cat"        && chkok || chkfail # 0.6.0
ln -sf busybox-mol "${BUILD_ROOT}/initrd/exec/chroot"     && chkok || chkfail # 0.6.0
ln -sf busybox-mol "${BUILD_ROOT}/initrd/exec/cp"         && chkok || chkfail # 0.6.0
ln -sf busybox-mol "${BUILD_ROOT}/initrd/exec/echo"       && chkok || chkfail # 0.6.0
ln -sf busybox-mol "${BUILD_ROOT}/initrd/exec/insmod"     && chkok || chkfail # 0.6.0
ln -sf busybox-mol "${BUILD_ROOT}/initrd/exec/losetup"    && chkok || chkfail # 0.6.0
ln -sf busybox-mol "${BUILD_ROOT}/initrd/exec/mkdir"      && chkok || chkfail # 0.6.0
ln -sf busybox-mol "${BUILD_ROOT}/initrd/exec/mount"      && chkok || chkfail # 0.6.0
ln -sf busybox-mol "${BUILD_ROOT}/initrd/exec/pivot_root" && chkok || chkfail # 0.6.0
ln -sf busybox-mol "${BUILD_ROOT}/initrd/exec/rmdir"      && chkok || chkfail # 0.6.0
ln -sf busybox-mol "${BUILD_ROOT}/initrd/exec/rmmod"      && chkok || chkfail # 0.6.0
ln -sf busybox-mol "${BUILD_ROOT}/initrd/exec/sh"         && chkok || chkfail # 0.6.0
ln -sf busybox-mol "${BUILD_ROOT}/initrd/exec/test"       && chkok || chkfail # 0.6.0
ln -sf busybox-mol "${BUILD_ROOT}/initrd/exec/umount"     && chkok || chkfail # 0.6.0

ln -sf busybox-mol "${BUILD_ROOT}/initrd/exec/eject"      && chkok || chkfail # 0.6.0
ln -sf busybox-mol "${BUILD_ROOT}/initrd/exec/halt"       && chkok || chkfail # 0.6.0
ln -sf busybox-mol "${BUILD_ROOT}/initrd/exec/ln"         && chkok || chkfail # 0.6.0
ln -sf busybox-mol "${BUILD_ROOT}/initrd/exec/ls"         && chkok || chkfail # 0.6.0
ln -sf busybox-mol "${BUILD_ROOT}/initrd/exec/mv"         && chkok || chkfail # 0.6.0
ln -sf busybox-mol "${BUILD_ROOT}/initrd/exec/poweroff"   && chkok || chkfail # 0.6.0
ln -sf busybox-mol "${BUILD_ROOT}/initrd/exec/readlink"   && chkok || chkfail # 0.6.0
ln -sf busybox-mol "${BUILD_ROOT}/initrd/exec/reboot"     && chkok || chkfail # 0.6.0
ln -sf busybox-mol "${BUILD_ROOT}/initrd/exec/rm"         && chkok || chkfail # 0.6.0

echo "${GREEN}Done${NORMAL}"

## /dev ##
# Making device files
echo -n "${BLUE}Making device files${NORMAL}"
[ -d ${BUILD_ROOT}/initrd/dev ] || mkdir -p ${BUILD_ROOT}/initrd/dev && chkok || chkfail
#MAKEDEV -d ${BUILD_ROOT}/initrd/dev console && chkok || chkfail
MAKEDEV -d ${BUILD_ROOT}/initrd/dev -c /etc/mol/makedev.d mol >/dev/null 2>&1 && chkok || chkfail # 0.6.0
#mknod ${BUILD_ROOT}/initrd/dev/console c 5 1
#MAKEDEV -d ${BUILD_ROOT}/initrd/dev fd      >/dev/null 2>&1 && chkok || chkfail
#MAKEDEV -d ${BUILD_ROOT}/initrd/dev hd      >/dev/null 2>&1 && chkok || chkfail
#MAKEDEV -d ${BUILD_ROOT}/initrd/dev loop    >/dev/null 2>&1 && chkok || chkfail
#MAKEDEV -d ${BUILD_ROOT}/initrd/dev mem     >/dev/null 2>&1 && chkok || chkfail
#MAKEDEV -d ${BUILD_ROOT}/initrd/dev null    >/dev/null 2>&1 && chkok || chkfail
#MAKEDEV -d ${BUILD_ROOT}/initrd/dev pcd     >/dev/null 2>&1 && chkok || chkfail
#MAKEDEV -d ${BUILD_ROOT}/initrd/dev random  >/dev/null 2>&1 && chkok || chkfail
#MAKEDEV -d ${BUILD_ROOT}/initrd/dev ram     >/dev/null 2>&1 && chkok || chkfail
#MAKEDEV -d ${BUILD_ROOT}/initrd/dev ramdisk >/dev/null 2>&1 && chkok || chkfail
#MAKEDEV -d ${BUILD_ROOT}/initrd/dev root    >/dev/null 2>&1 && chkok || chkfail
#MAKEDEV -d ${BUILD_ROOT}/initrd/dev scd     >/dev/null 2>&1 && chkok || chkfail
#MAKEDEV -d ${BUILD_ROOT}/initrd/dev sd      >/dev/null 2>&1 && chkok || chkfail
#MAKEDEV -d ${BUILD_ROOT}/initrd/dev ub      >/dev/null 2>&1 && chkok || chkfail
#MAKEDEV -d ${BUILD_ROOT}/initrd/dev zero    >/dev/null 2>&1 && chkok || chkfail
#ln -sf fd0 ${BUILD_ROOT}/initrd/dev/floppy  && chkok || chkfail
mkdir -p ${BUILD_ROOT}/initrd/dev/pts       && chkok || chkfail
mkdir -p ${BUILD_ROOT}/initrd/dev/shm       && chkok || chkfail
#rm -f ${BUILD_ROOT}/initrd/dev/tty*           && chkok || chkfail
#rm -f ${BUILD_ROOT}/initrd/dev/fd[!01]*       && chkok || chkfail
#rm -f ${BUILD_ROOT}/initrd/dev/hd[!a-h]*      && chkok || chkfail
#rm -f ${BUILD_ROOT}/initrd/dev/hd?2[5-9]      && chkok || chkfail
#rm -f ${BUILD_ROOT}/initrd/dev/hd?[3-9][0-9]  && chkok || chkfail
#rm -f ${BUILD_ROOT}/initrd/dev/loop[89]       && chkok || chkfail
#rm -f ${BUILD_ROOT}/initrd/dev/loop[1-9][0-9] && chkok || chkfail
#rm -f ${BUILD_ROOT}/initrd/dev/loop[1-9][0-9][0-9] && chkok || chkfail
#rm -f ${BUILD_ROOT}/initrd/dev/ram1[7-9]      && chkok || chkfail
#rm -f ${BUILD_ROOT}/initrd/dev/ram[2-9][0-9]  && chkok || chkfail
#rm -f ${BUILD_ROOT}/initrd/dev/ram1[0-9][0-9] && chkok || chkfail
#rm -f ${BUILD_ROOT}/initrd/dev/scd1[7-9]      && chkok || chkfail
#rm -f ${BUILD_ROOT}/initrd/dev/scd[2-9][0-9]  && chkok || chkfail
#rm -f ${BUILD_ROOT}/initrd/dev/sd[a-z][a-z]*  && chkok || chkfail
#rm -f ${BUILD_ROOT}/initrd/dev/sd[!a-h]*      && chkok || chkfail
#rm -f ${BUILD_ROOT}/initrd/dev/sd?2[5-9]      && chkok || chkfail
#rm -f ${BUILD_ROOT}/initrd/dev/sd?[3-9][0-9]  && chkok || chkfail
#rm -f ${BUILD_ROOT}/initrd/dev/ub[!a-d]*      && chkok || chkfail
#rm -f ${BUILD_ROOT}/initrd/dev/ub[a-z][a-z]*  && chkok || chkfail
echo "${GREEN}Done${NORMAL}"

## /etc ##
# Making directories and links to initrd/etc
echo -n "${BLUE}Making directories and links to initrd/etc${NORMAL}"
mkdir -p ${BUILD_ROOT}/initrd/etc             && chkok || chkfail
mkdir -p ${BUILD_ROOT}/initrd/etc/mol         && chkok || chkfail ## 0.6.0
[ -d /etc/X11 ] && mkdir -p ${BUILD_ROOT}/initrd/etc/X11         && chkok || chkfail
mkdir -p ${BUILD_ROOT}/initrd/etc/rc.d        && chkok || chkfail
mkdir -p ${BUILD_ROOT}/initrd/etc/rc.d/init.d && chkok || chkfail
mkdir -p ${BUILD_ROOT}/initrd/etc/rc.d/rc0.d  && chkok || chkfail
mkdir -p ${BUILD_ROOT}/initrd/etc/rc.d/rc1.d  && chkok || chkfail
mkdir -p ${BUILD_ROOT}/initrd/etc/rc.d/rc2.d  && chkok || chkfail
mkdir -p ${BUILD_ROOT}/initrd/etc/rc.d/rc3.d  && chkok || chkfail
mkdir -p ${BUILD_ROOT}/initrd/etc/rc.d/rc4.d  && chkok || chkfail
mkdir -p ${BUILD_ROOT}/initrd/etc/rc.d/rc5.d  && chkok || chkfail
mkdir -p ${BUILD_ROOT}/initrd/etc/rc.d/rc6.d  && chkok || chkfail
ln -s rc.d/init.d ${BUILD_ROOT}/initrd/etc/init.d && chkok || chkfail
ln -s rc.d/rc     ${BUILD_ROOT}/initrd/etc/rc     && chkok || chkfail
ln -s rc.d/rc0.d  ${BUILD_ROOT}/initrd/etc/rc0.d  && chkok || chkfail
ln -s rc.d/rc1.d  ${BUILD_ROOT}/initrd/etc/rc1.d  && chkok || chkfail
ln -s rc.d/rc2.d  ${BUILD_ROOT}/initrd/etc/rc2.d  && chkok || chkfail
ln -s rc.d/rc3.d  ${BUILD_ROOT}/initrd/etc/rc3.d  && chkok || chkfail
ln -s rc.d/rc4.d  ${BUILD_ROOT}/initrd/etc/rc4.d  && chkok || chkfail
ln -s rc.d/rc5.d  ${BUILD_ROOT}/initrd/etc/rc5.d  && chkok || chkfail
ln -s rc.d/rc6.d  ${BUILD_ROOT}/initrd/etc/rc6.d  && chkok || chkfail
ln -s rc.d/rc.sysinit ${BUILD_ROOT}/initrd/etc/rc.sysinit && chkok || chkfail
ln -s ../init.d/halt  ${BUILD_ROOT}/initrd/etc/rc.d/rc0.d/`basename /etc/rc.d/rc0.d/S??halt`   && chkok || chkfail
ln -s ../init.d/halt  ${BUILD_ROOT}/initrd/etc/rc.d/rc6.d/`basename /etc/rc.d/rc6.d/S??reboot` && chkok || chkfail
ln -s ../init.d/netfs ${BUILD_ROOT}/initrd/etc/rc.d/rc0.d/`basename /etc/rc.d/rc0.d/???netfs` && chkok || chkfail
ln -s ../init.d/netfs ${BUILD_ROOT}/initrd/etc/rc.d/rc1.d/`basename /etc/rc.d/rc1.d/???netfs` && chkok || chkfail
ln -s ../init.d/netfs ${BUILD_ROOT}/initrd/etc/rc.d/rc2.d/`basename /etc/rc.d/rc2.d/???netfs` && chkok || chkfail
ln -s ../init.d/netfs ${BUILD_ROOT}/initrd/etc/rc.d/rc3.d/`basename /etc/rc.d/rc3.d/???netfs` && chkok || chkfail
ln -s ../init.d/netfs ${BUILD_ROOT}/initrd/etc/rc.d/rc4.d/`basename /etc/rc.d/rc4.d/???netfs` && chkok || chkfail
ln -s ../init.d/netfs ${BUILD_ROOT}/initrd/etc/rc.d/rc5.d/`basename /etc/rc.d/rc5.d/???netfs` && chkok || chkfail
ln -s ../init.d/netfs ${BUILD_ROOT}/initrd/etc/rc.d/rc6.d/`basename /etc/rc.d/rc6.d/???netfs` && chkok || chkfail
echo "${GREEN}Done${NORMAL}"

# Copying some files from current system
echo -n "${BLUE}Copying some files from current system${NORMAL}"
#cp -a /etc/auto.misc   ${BUILD_ROOT}/initrd/etc/ >/dev/null 2>&1 && chkok
cp -a /etc/filesystems ${BUILD_ROOT}/initrd/etc/ >/dev/null 2>&1 && chkok || chkfail
cp -a /etc/group       ${BUILD_ROOT}/initrd/etc/ >/dev/null 2>&1 && chkok || chkfail
cp -a /etc/gshadow     ${BUILD_ROOT}/initrd/etc/ >/dev/null 2>&1 && chkok || chkfail
cp -a /etc/inittab     ${BUILD_ROOT}/initrd/etc/ >/dev/null 2>&1 && chkok || chkfail
cp -a /etc/passwd      ${BUILD_ROOT}/initrd/etc/ >/dev/null 2>&1 && chkok || chkfail
cp -a /etc/resolv.conf ${BUILD_ROOT}/initrd/etc/ >/dev/null 2>&1 && chkok || chkfail
cp -a /etc/shadow      ${BUILD_ROOT}/initrd/etc/ >/dev/null 2>&1 && chkok || chkfail
cp -a /etc/mol/hierarchy.list ${BUILD_ROOT}/initrd/etc/mol/ >/dev/null 2>&1 && chkok || chkfail # 0.6.0
cp -a /etc/rc.d/rc     ${BUILD_ROOT}/initrd/etc/rc.d/ >/dev/null 2>&1 && chkok || chkfail
echo "${GREEN}Done${NORMAL}"

# Making MOL configuration files
echo -n "${BLUE}Making MOL configuration files${NORMAL}"
echo "/dev/root / ext2 rw 0 0" > ${BUILD_ROOT}/initrd/etc/mtab && chkok || chkfail
mkdir ${BUILD_ROOT}/patch >/dev/null 2>&1 && chkok || chkfail
for i in ${PATCHING}; do
	BASENAME="$(basename ${i})"
	[ -e "${i}" -a  -e "${DATADIR}/mol/patch/${BASENAME}.patch" ] || continue
	cp -a ${i} ${BUILD_ROOT}/patch/${BASENAME}
	patch ${BUILD_ROOT}/patch/${BASENAME} ${DATADIR}/mol/patch/${BASENAME}.patch >/dev/null 2>&1
	cp -a ${BUILD_ROOT}/patch/${BASENAME} ${BUILD_ROOT}/initrd${i}
done
#cp -a /etc/rc.d/rc.sysinit   ${BUILD_ROOT}/patch/rc.sysinit >/dev/null 2>&1 && chkok || chkfail
#cp -a /etc/rc.d/init.d/halt  ${BUILD_ROOT}/patch/halt       >/dev/null 2>&1 && chkok || chkfail
#cp -a /etc/rc.d/init.d/netfs ${BUILD_ROOT}/patch/netfs      >/dev/null 2>&1 && chkok || chkfail
#cp -a ${DATADIR}/mol/dependence/rc.sysinit.${DISTRIBUTION}.patch ${BUILD_ROOT}/patch/ >/dev/null 2>&1 && chkok || chkfail
#cp -a ${DATADIR}/mol/dependence/halt.${DISTRIBUTION}.patch       ${BUILD_ROOT}/patch/ >/dev/null 2>&1 && chkok || chkfail
#cp -a ${DATADIR}/mol/dependence/netfs.${DISTRIBUTION}.patch      ${BUILD_ROOT}/patch/ >/dev/null 2>&1 && chkok || chkfail
#pushd ${BUILD_ROOT}/patch                >/dev/null 2>&1 && chkok || chkfail
#patch < rc.sysinit.${distribution}.patch >/dev/null 2>&1 && chkok || chkfail
#patch < halt.${distribution}.patch       >/dev/null 2>&1 && chkok || chkfail
#patch < netfs.${distribution}.patch      >/dev/null 2>&1 && chkok || chkfail
#mv rc.sysinit rc.sysinit.${DISTRIBUTION} && chkok || chkfail
#mv halt halt.${DISTRIBUTION}             && chkok || chkfail
#mv netfs netfs.${DISTRIBUTION}           && chkok || chkfail
#popd                                     >/dev/null 2>&1 && chkok || chkfail
echo "${GREEN}Done${NORMAL}"

# Copying MOL configuration files
echo -n "${BLUE}Copying MOL configuration files${NORMAL}"
#cp -a ${DATADIR}/mol/dependence/fstab.${DISTRIBUTION}            ${BUILD_ROOT}/initrd/etc/fstab             >/dev/null 2>&1 && chkok
#cp -a ${DATADIR}/mol/dependence/modprobe.conf.in.${DISTRIBUTION} ${BUILD_ROOT}/initrd/etc/modprobe.conf.in  >/dev/null 2>&1 && chkok
cp -a "${DATADIR}/mol/replace/fstab"            "${BUILD_ROOT}/initrd/etc/fstab"               >/dev/null 2>&1 && chkok
cp -a "${DATADIR}/mol/replace/modprobe.conf.in" "${BUILD_ROOT}/initrd/etc/modprobe.conf.in"    >/dev/null 2>&1 && chkok
cp -a "${DATADIR}/mol/replace/XF86Config.in"    "${BUILD_ROOT}/initrd/etc/X11/XF86Config.in"   >/dev/null 2>&1 && chkok
cp -a "${DATADIR}/mol/replace/XF86Config-4.in"  "${BUILD_ROOT}/initrd/etc/X11/XF86Config-4.in" >/dev/null 2>&1 && chkok
cp -a "${DATADIR}/mol/replace/xorg.conf.in"     "${BUILD_ROOT}/initrd/etc/X11/xorg.conf.in"    >/dev/null 2>&1 && chkok
#cp -a ${BUILD_ROOT}/patch/rc.sysinit.${DISTRIBUTION} ${BUILD_ROOT}/initrd/etc/rc.d/rc.sysinit   >/dev/null 2>&1 && chkok
#cp -a ${BUILD_ROOT}/patch/halt.${DISTRIBUTION}       ${BUILD_ROOT}/initrd/etc/rc.d/init.d/halt  >/dev/null 2>&1 && chkok
#cp -a ${BUILD_ROOT}/patch/netfs.${DISTRIBUTION}      ${BUILD_ROOT}/initrd/etc/rc.d/init.d/netfs >/dev/null 2>&1 && chkok
echo "${GREEN}Done${NORMAL}"

## /modules ##
## Setting module list
#MODULE_LIST=" \
#	     cdrom.ko \
#	     usbcore.ko \
#	     ehci-hcd.ko \
#	     uhci-hcd.ko \
#	     ohci-hcd.ko \
#	     usbhid.ko \
#	     loop.ko \
#	     ide-cd.ko \
#	     isofs.ko \
#	     nls_cp437.ko \
#	     nls_utf8.ko \
#	     fat.ko \
#	     vfat.ko \
#	     ntfs.ko \
#	     jbd.ko \
#	     ext3.ko \
#	     reiserfs.ko \
#	     squashfs.ko \
#		 cloop.ko"
#
#SCSI_MODULE_LIST=" \
#	     scsi_mod.ko \
#	     sr_mod.ko \
#	     aha1740.ko \
#	     aha1542.ko \
#	     aha152x.ko \
#	     pas16.ko \
#	     psi240i.ko \
#	     qlogicfas.ko \
#	     qlogicfs.ko \
#	     seagate.ko \
#	     t128.ko \
#	     u14-34f.ko \
#	     wd7000.ko \
#	     aic7xxx.ko \
#	     BusLogic.ko \
#	     ncr53c8xx.ko \
#	     NCR53c406a.ko \
#	     initio.ko \
#	     mptscsih.ko \
#	     advansys.ko \
#	     atp870u.ko \
#	     dtc.ko \
#	     eata.ko \
#	     fdomain.ko \
#	     gdth.ko \
#	     megaraid.ko \
#	     pci2220i.ko \
#	     pci2000.ko \
#	     qlogicisp.ko \
#	     tmscsim.ko \
#	     ultrastor.ko \
#	     3w-xxxx.ko \
#	     ataraid.ko \
#	     silraid.ko \
#	     medley.ko \
#	     pdcraid.ko"
#
#STORAGE_MODULE_LIST=" \
#	     usb-storage.ko \
#	     sd_mod.ko \
#	     ieee1394.ko \
#	     ohci1394.ko \
#	     sbp2.ko"

# Setting additional module list
ADD_MODULE_LIST=$(mklist "$IN_MOD_LIST" 2>/dev/null)

# Making modules directories
echo -n "${BLUE}Making modules directories${NORMAL}"
mkdir -p ${BUILD_ROOT}/initrd/modules         && chkok || chkfail
mkdir -p ${BUILD_ROOT}/initrd/modules/scsi    && chkok || chkfail
mkdir -p ${BUILD_ROOT}/initrd/modules/storage && chkok || chkfail
mkdir -p ${BUILD_ROOT}/initrd/modules/add     && chkok || chkfail
echo "${GREEN}Done${NORMAL}"

# Copying necessary kernel modules
echo -n "${BLUE}Copying necesarry kernel modules${NORMAL}"
for modules in ${MODULE_LIST}
do
	cp $(find /lib/modules/${KERNEL_RELEASE}/ -name "${modules}" 2>/dev/null) ${BUILD_ROOT}/initrd/modules/ >/dev/null 2>&1 && chkok
done
for modules in ${SCSI_MODULE_LIST}
do
	cp $(find /lib/modules/${KERNEL_RELEASE}/ -name "${modules}" 2>/dev/null) ${BUILD_ROOT}/initrd/modules/scsi/ >/dev/null 2>&1 && chkok
done
for modules in ${STORAGE_MODULE_LIST}
do
	cp $(find /lib/modules/${KERNEL_RELEASE}/ -name "${modules}" 2>/dev/null) ${BUILD_ROOT}/initrd/modules/storage/ >/dev/null 2>&1 && chkok
done
for modules in ${ADD_MODULE_LIST}
do
	cp $(find /lib/modules/${KERNEL_RELEASE}/ -name "${modules}" 2>/dev/null) ${BUILD_ROOT}/initrd/modules/add/ >/dev/null 2>&1 && chkok
done
echo "${GREEN}Done${NORMAL}"

## Making initial ramdisk image ##
echo -n "${BLUE}Making initial ramdisk image${NORMAL}"

# create ext2 filesystem to ram
dd if=/dev/zero of=/dev/ram bs=${INITRD_BS} count=${INITRD_COUNT} >/dev/null 2>&1 && chkok || chkfail
mke2fs -vm0 /dev/ram ${INITRD_COUNT}                              >/dev/null 2>&1 && chkok || chkfail

# copy contents of initrd.img to ram
[ -d ${BUILD_ROOT}/loop ] || mkdir -p ${BUILD_ROOT}/loop >/dev/null 2>&1 && chkok || chkfail
mount -t ext2 -o loop /dev/ram ${BUILD_ROOT}/loop        >/dev/null 2>&1 && chkok || chkfail
rmdir ${BUILD_ROOT}/loop/lost+found                      >/dev/null 2>&1 && chkok || chkfail
cp -a ${BUILD_ROOT}/initrd/* ${BUILD_ROOT}/loop/         >/dev/null 2>&1 && chkok || chkfail
umount ${BUILD_ROOT}/loop                                >/dev/null 2>&1 && chkok || chkfail
rmdir ${BUILD_ROOT}/loop                                 >/dev/null 2>&1 && chkok || chkfail

# make initrd.img
[ -d ${BUILD_ROOT}/var ] || mkdir -p ${BUILD_ROOT}/var >/dev/null 2>&1 && chkok || chkfail
[ -f ${BUILD_ROOT}/var/initrd ] && rm -f ${BUILD_ROOT}/var/initrd >/dev/null 2>&1 && chkok
dd if=/dev/ram of=${BUILD_ROOT}/var/initrd bs=${INITRD_BS} count=${INITRD_COUNT} >/dev/null 2>&1 && chkok || chkfail
gzip -v9 < ${BUILD_ROOT}/var/initrd > ${BUILD_ROOT}/initrd.img 2>&1 && chkok || chkfail
rm -rf ${BUILD_ROOT}/var >/dev/null 2>&1 && chkok || chkfail
if [ "${COPY_INITRD_TO_BOOTDIR}" = "yes" ]
then
	KERNEL="$(grubby --default-kernel)"
	KERNEL="${KERNEL%vmlinuz*}vmlinuz-${KERNEL_RELEASE}"
	cp -a ${BUILD_ROOT}/initrd.img /boot/initrd-mol-${MOLVERSION}.img >/dev/null 2>&1 && chkok || chkfail
	grubby --copy-default --add-kernel=${KERNEL} --title="${OLTITLE}" --args="root=/dev/root boot=overlay rwdevice=ramdisk selinux=0" --initrd=/boot/initrd-mol-${MOLVERSION}.img >/dev/null 2>&1 && chkok || chkfail
	grubby --copy-default --add-kernel=${KERNEL} --title="${ROTITLE}" --args="root=/dev/root boot=romode rwdevice=ramdisk selinux=0" --initrd=/boot/initrd-mol-${MOLVERSION}.img >/dev/null 2>&1 && chkok || chkfail
fi
echo "${GREEN}Done${NORMAL}"


## === fin. === ##
touch ${BUILD_ROOT}/mkinitrd-mol.flag
echo "${MAGENTA}mkinitrd-mol Finished${NORMAL}"
exit 0

