summaryrefslogblamecommitdiffstats
path: root/mltk
blob: 6b18e187bc549b194f6236b002515cb0970d19e6 (plain) (tree)
1
2
3
           
                                                                               
  













                                                                               
 

                               
             
 






                                  
                                  
                                     
                                   
                                  
 
           







                                                                                    

 

                                                                            
                                                                           
                  
                           

                                                                                                       
                  



                                                                      
                  



                                                                                            



                                                                                                              
                  
                                                   
                                                            
 
 

                                            
                                                                                 





                                    

                                                    
 

                                                                                            
 
 
               

                        















                                                     



                                  


























                                                                                                                                                                      
            
 




                                                             
                            
                                                                                                                     


       




                                                                             
          

                                                                  
                                       


                                                                         
          

 








                   

              
 
   
#!/bin/bash
# -----------------------------------------------------------------------------
# 
# Copyright (c) 2011 - OpenSLX GmbH
#
# This program is free software distributed under the GPL version 2.
# See http://openslx.org/COPYING
#
# If you have any feedback please consult http://openslx.org/feedback and
# send your suggestions, praise, or complaints to feedback@openslx.org
#
# General information about OpenSLX can be found at http://openslx.org/
# -----------------------------------------------------------------------------
#				
#				Mini-Linux Toolkit
#				
# -----------------------------------------------------------------------------

SELF="$(readlink -f $0)"
ROOT_DIR="$(dirname "${SELF}")"
MLTK_PID="$$"

qnd_exit() {
	unset_quiet
	kill "$MLTK_PID"
	[ $# -ge 1 ] && kill "$1"
}

. "${ROOT_DIR}/helper/logging.inc"
. "${ROOT_DIR}/helper/useradd.inc"
. "${ROOT_DIR}/helper/downloader.inc"
. "${ROOT_DIR}/helper/fileutil.inc"
. "${ROOT_DIR}/helper/binutil.inc"

banner () {
	echo -e "\033[38;5;202m\t           __   __   __    "
	echo -e "\033[38;5;202m\t.--------.|  | |  |_|  |--."
	echo -e "\033[38;5;208m\t|        ||  |_|   _|    < "
	echo -e "\033[38;5;214m\t|__|__|__||____|____|__|__|"
	echo -e "\033[38;5;214m\t "
	echo -e "\033[38;5;220m\t                     ** OpenSLX Project // 2013 **"
	echo -e "\033[38;5;226m\t                        http://lab.openslx.org/"
	echo -e "\033[0m"
}

print_usage() {
	echo "Toolkit for creating preboot mini-linux for OpenSLX NG (mltk)"
	echo "Usage: $(basename ${SELF}) [target] [-b] [-c] [-d] [module]*"
	echo -e ""
	echo -e "  Target:"
	echo -e "     core \t minimal initramfs (stage 3.1) to mount the system-container (stage 3.2)."
	echo -e "     tools \t minimal systemd-based rootfs including basic tools (required for core)."
	echo -e ""
	echo -e "  Target options:"
	echo -e "     -b \t build current target"
	echo -e "     -c \t clean current target"
	echo -e "     -d \t activates debug output for current target"
	echo -e ""
	echo -e "  For target tools, you can pass names of specific modules to clean/build."
	echo -e "  Otherwise, all modules will be built/cleaned."
	echo -e ""
	echo -e "  Examples:"
	echo -e "     tools -c -b base policykit sshd (clean all tools, build base, policykit and sshd)"
	echo -e "     tools -c -b (clean all tools, build all tools)"
	echo -e "     tools -c base sshd -b sshd ldm -d (clean base and sshd, build sshd and ldm, be verbose)"
	echo -e "     core -c -b (clean and build core)"
	echo -e ""
	echo -e "  Existing modules for tools are:"
	echo -e "    $(echo $(ls ${ROOT_DIR}/remote/tools))"
}

initial_checks() {
	if [ "x$(whoami)" != "xroot" ]; then
		perror "ERROR: You need to have root rights to install packages."
		exit 1
	else
		banner
	fi
	
	# setup_tools and build_core
	BUILD_CORE="${ROOT_DIR}/server/build_core"
	SETUP_TOOLS="${ROOT_DIR}/remote/setup_tools"

	[ ! -e "${BUILD_CORE}" ] && perror "Missing script build_core, re-clone. Exiting."
	[ ! -e "${SETUP_TOOLS}" ] && perror "Missing script setup_tools, re-clone. Exiting."
}

read_params() {
	local MODE=""
	local SUBMODE=""
	# select target: core or tools
	case "$1" in
		core)
			MODE="CORE"
			;;
		tools)
			MODE="TOOLS"
			;;
		*)
			pwarning "Unknown target: $1"
			print_usage
			exit 1
			;;
	esac
	shift
	# handle rest of arguments
	while [ "$#" -gt "0" ]; do
		local PARAM="$1"
		shift

		# options to current target
		if [[ "$PARAM" == "-"* ]]; then
			case "$PARAM" in
				-c)
					SUBMODE="CLEAN"
					;;
				-b)
					SUBMODE="BUILD"
					;;
				-d)
					eval ${MODE}_DEBUG="1"
					continue
					;;
				*)
					pwarning "Unknown flag to target: $PARAM"
					print_usage
					exit 1
					;;
			esac
			eval ${MODE}_${SUBMODE}="1"
			continue
		fi

		# module name
		[[ $MODE != TOOLS ]] && pwarning "You cannot specify module names for target CORE." && print_usage && exit 1
		[[ $SUBMODE != CLEAN && $SUBMODE != BUILD ]] && pwarning "Module name given for --tools, but no action specified (eg. build)" && print_usage && exit 1
		eval "${MODE}_LIST_${SUBMODE}=\"\$${MODE}_LIST_${SUBMODE} \$PARAM\""
	done

	#pinfo "tools clean: $TOOLS_CLEAN -$TOOLS_LIST_CLEAN"
	#pinfo "tools build: $TOOLS_BUILD -$TOOLS_LIST_BUILD"
	#pinfo "core clean: $CORE_CLEAN"
	#pinfo "core build: $CORE_BUILD"

	# exit if no command
	[[ $CORE_CLEAN == 0 && $CORE_BUILD == 0 && $TOOLS_CLEAN == 0 && $TOOLS_BUILD == 0 ]] && print_usage && exit 1
}

run() {
	if [[ $TOOLS_CLEAN == 1 || $TOOLS_BUILD == 1 ]]; then
		[[ $TOOLS_DEBUG == 1 ]] && unset_quiet || set_quiet
		. "${SETUP_TOOLS}" || perror "Cannot source ${SETUP_TOOLS}"
	        [[ $TOOLS_CLEAN == 1 ]] && clean_tools $TOOLS_LIST_CLEAN
	        [[ $TOOLS_BUILD == 1 ]] && generate_stage32 $TOOLS_LIST_BUILD
	fi
	if [[ $CORE_CLEAN == 1 || $CORE_BUILD == 1 ]]; then
		[[ $CORE_DEBUG == 1 ]] && unset_quiet || set_quiet
		local TOOL_STR="[CORE]"
		. "${BUILD_CORE}" || perror "Cannot source ${BUILD_CORE}"
	        [[ $CORE_CLEAN == 1 ]] && clean_core
	        [[ $CORE_BUILD == 1 ]] && generate_stage31
	fi
}

CORE_DEBUG="0"
CORE_BUILD="0"
CORE_CLEAN="0"
TOOLS_DEBUG="0"
TOOLS_CLEAN="0"
TOOLS_BUILD="0"
TOOLS_LIST_CLEAN=""
TOOLS_LIST_BUILD=""

initial_checks
read_params $@

run