thiblizzfix: minor typosdcd8b8b3 years agoHistory
136 lines · 4.7 KB · Text
RawDownload
#!/bin/bashset -uo pipefail  ################################################# Initialize script environment # Find the directory this script is stored in. (from: http://stackoverflow.com/questions/59895)function get_source_dir() {	local source="${BASH_SOURCE[0]}"	while [[ -h $source ]]	do		local tmp		tmp="$(cd -P "$(dirname "${source}")" && pwd)"		source="$(readlink "${source}")"		[[ $source != /* ]] && source="${tmp}/${source}"	done 	echo -n "$(realpath "$(dirname "${source}")")"} ACTUAL_WORKING_DIRECTORY="$(realpath "$(pwd)")" || exit 1export ACTUAL_WORKING_DIRECTORYGENTOO_INSTALL_REPO_DIR_ORIGINAL="$(get_source_dir)"export GENTOO_INSTALL_REPO_DIR_ORIGINALexport GENTOO_INSTALL_REPO_DIR="$GENTOO_INSTALL_REPO_DIR_ORIGINAL"export GENTOO_INSTALL_REPO_SCRIPT_ACTIVE=trueexport GENTOO_INSTALL_REPO_SCRIPT_PID=$$ umask 0077 # shellcheck source=./scripts/utils.shsource "$GENTOO_INSTALL_REPO_DIR/scripts/utils.sh"# shellcheck source=./scripts/config.shsource "$GENTOO_INSTALL_REPO_DIR/scripts/config.sh"# shellcheck source=./scripts/functions.shsource "$GENTOO_INSTALL_REPO_DIR/scripts/functions.sh"# shellcheck source=./scripts/main.shsource "$GENTOO_INSTALL_REPO_DIR/scripts/main.sh"  ################################################# Main dispatch # Instantly kill when pressing ctrl-ctrap 'kill "$GENTOO_INSTALL_REPO_SCRIPT_PID"' INT ACTION=""CONFIG="$GENTOO_INSTALL_REPO_DIR/gentoo.conf" while [[ $# -gt 0 ]]; do	case "$1" in		""|"help"|"--help"|"-help"|"-h")			echo "Usage: $0 [opts]... <action>"			echo "Performs a minimal gentoo installation. See https://github.com/oddlama/gentoo-install"			echo "for more information. If the configuration file does not exist, the configurator will"			echo "be started instead."			echo ""			echo "Options:"			echo "  -c, --config <CONFIG>         Use the given configuration file instead of the default"			echo "                                  location (gentoo.conf). Applies to installation as well"			echo "                                  as initial configuration in case it doesn't exist."			echo ""			echo "Actions:"			echo "  -i, --install                 Installs gentoo as configured. This is the default mode,"			echo "                                  if the given configuration file exists."			echo "  -R, --chroot <DIR> [CMD...]   Chroot into an existing system. The root filesystem"			echo "                                  must already be mounted under DIR. All required special"			echo "                                  filesystems will be mounted inside, and unmounted when"			echo "                                  the chroot exits."			exit 0			;;		"-c"|"--config")			[[ -f "$2" ]] \				|| die "Config file not found: '$2'"			CONFIG="$(cd "$ACTUAL_WORKING_DIRECTORY" && realpath --relative-to="$GENTOO_INSTALL_REPO_DIR" "$2" 2>/dev/null)" || die "Could not determine realpath to config"			shift			;;		"-R"|"--chroot")			[[ -z $ACTION ]] || die "Multiple actions given"			ACTION="chroot"			CHROOT_DIR="$2"			[[ -e "$CHROOT_DIR" ]] || die "Chroot directory not found: '$CHROOT_DIR'"			shift			;;		"-i"|"--install")			[[ -z $ACTION ]] || die "Multiple actions given"			ACTION="install"			;;		"__install_gentoo_in_chroot")			ACTION="__install_gentoo_in_chroot"			;;		*) die "Invalid option '$1'" ;;	esac	shiftdone # Check configuration location[[ -z "${CONFIG%%"$GENTOO_INSTALL_REPO_DIR"*}" ]] \	|| die "Configuration file must be inside the installation directory. This is needed so it is accessible from within the chroot environment." if [[ -z "$ACTION" ]]; then	if [[ -e "$CONFIG" ]]; then		# Default if configuration exists: Run installer		ACTION="install"	else		# Default if configuration does not exist: Run configurator, and exit afterwards.		echo "You have not created a gentoo.conf. Starting configurator instead of installing."		exec "$GENTOO_INSTALL_REPO_DIR/configure" "$CONFIG"	fifi if [[ "$ACTION" != "chroot" ]]; then	# Load config if we aren't just chrooting	[[ -e "$CONFIG" ]] \		 || die "Configuration file '$CONFIG' does not exist. To run the configurator, omit '-i' flag or run ./configure" 	# shellcheck disable=SC1090	source "$CONFIG" || die "Could not source config"	[[ $I_HAVE_READ_AND_EDITED_THE_CONFIG_PROPERLY == "true" ]] \		|| die "You have not properly read the config. Edit the config file and set I_HAVE_READ_AND_EDITED_THE_CONFIG_PROPERLY=true to continue." 	preprocess_configfi [[ $EUID == 0 ]] \	|| die "Must be root" mkdir_or_die 0755 "$TMP_DIR" case "$ACTION" in	"chroot")  main_chroot "$CHROOT_DIR" "$@" ;;	"install") main_install "$@" ;;	"__install_gentoo_in_chroot") main_install_gentoo_in_chroot "$@" ;;	*) die "Invalid action '$ACTION'" ;;esac