summaryrefslogblamecommitdiffstats
path: root/mltk
blob: b4ee268c1bf1cbd7d3bc8684607a06ff98f09e9d (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"
. "${ROOT_DIR}/helper/system.inc"

pinfo "System's packet manager is $PACKET_MANAGER"

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}) tools [-d] [-c [module]*] [-b [module]*] [-p profile]"
	echo "       $(basename ${SELF}) core [-d] [-c] [-b] [-n]"
	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            build target"
	echo -e "     -c            clean target"
	echo -e "     -d            activates debug output for current target"
	echo -e "     -p profile    build all modules from given profile"
	echo -e "     -n 	    don't generate squashfs for stage 3.2"
	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 "     tools -c -p default   (clean all tools, build modules listed in profile default)"
	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
	SETUP_CORE="${ROOT_DIR}/remote/setup_core"
	SETUP_TOOLS="${ROOT_DIR}/remote/setup_tools"

	[ ! -e "${SETUP_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
					;;
				-p)
					[ "$#" -lt "1" ] && perror "Missing argument to -p"
					[ "$MODE" != "TOOLS" ] && perror "-p can only be used for target tools"
					. "remote/profiles/${1}.profile" || perror "Profile '$1' not found in remote/profiles/"
					TOOLS_BUILD="1"
					TOOLS_LIST_BUILD="$TOOLS_LIST_BUILD $MODULES"
					unset MODULES
					shift
					continue
					;;
				-n)						
					[ "$MODE" != "CORE" ] && perror "-n can only be used for target core"
					CORE_NO_SQUASHFS="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]"
		. "${SETUP_CORE}" || perror "Cannot source ${SETUP_CORE}"
	        [[ $CORE_CLEAN == 1 ]] && clean_core
	        [[ $CORE_BUILD == 1 ]] && generate_stage31
	fi
}

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

initial_checks
read_params $@

run