################################################ # Initialize script environment # Find the directory this script is stored in. (from: http://stackoverflow.com/questions/59895) get_source_dir() { local source="${BASH_SOURCE[0]}" while [[ -h "${source}" ]] do local tmp="$(cd -P "$(dirname "${source}")" && pwd)" source="$(readlink "${source}")" [[ "${source}" != /* ]] && source="${tmp}/${source}" done echo -n "$(realpath "$(dirname "${source}")")" } export GENTOO_BOOTSTRAP_DIR_ORIGINAL="$(dirname "$(get_source_dir)")" export GENTOO_BOOTSTRAP_DIR="$GENTOO_BOOTSTRAP_DIR_ORIGINAL" export GENTOO_BOOTSTRAP_SCRIPT_ACTIVE=true export GENTOO_BOOTSTRAP_SCRIPT_PID=$$ umask 0077 source "$GENTOO_BOOTSTRAP_DIR/scripts/utils.sh" source "$GENTOO_BOOTSTRAP_DIR/scripts/config.sh" source "$GENTOO_BOOTSTRAP_DIR/scripts/functions.sh" mkdir -p "$TMP_DIR" [[ $EUID == 0 ]] \ || die "Must be root" ################################################ # Functions install_stage3() { [[ $# == 0 ]] || die "Too many arguments" prepare_installation_environment partition_device format_partitions download_stage3 extract_stage3 } main_install_gentoo_in_chroot() { [[ $# == 0 ]] || die "Too many arguments" # Lock the root password, making the account unaccessible for the # period of installation, except by chrooting einfo "Locking root account" passwd -l root \ || die "Could not change root password" einfo "Selecting portage mirrors" # TODO mirrorselect # TODO gpg portage sync # TODO additional binary repos # TODO safe dns settings (claranet) # Mount efi partition einfo "Mounting efi" mount_by_partuuid "$PARTITION_UUID_EFI" "/boot/efi" # Sync portage einfo "Syncing portage tree" try emerge-webrsync # Set timezone einfo "Selecting timezone" echo "$TIMEZONE" > /etc/timezone \ || die "Could not write /etc/timezone" try emerge -v --config sys-libs/timezone-data # Set locale einfo "Selecting locale" echo "$LOCALES" > /etc/locale.gen \ || die "Could not write /etc/locale.gen" locale-gen \ || die "Could not generate locales" try eselect locale set "$LOCALE" # Set keymap einfo "Selecting keymap" sed -i "/keymap=/c\\$KEYMAP" /etc/conf.d/keymaps \ || die "Could not sed replace in /etc/conf.d/keymaps" # Update environment env_update # Prepare /etc/portage for autounmask mkdir_or_die "/etc/portage/package.use" touch_or_die "/etc/portage/package.use/zz-autounmask" mkdir_or_die "/etc/portage/package.keywords" touch_or_die "/etc/portage/package.keywords/zz-autounmask" # Install git (for git portage overlays) einfo "Installing git" try emerge --verbose dev-vcs/git #get kernel #compile minimal kernel to boot system #reboot? #mount boot partition #create kernel #create_ansible_user #generate_fresh keys to become mgmnt ansible user #install_ansible einfo "Gentoo installation complete" einfo "To chroot into the new system, simply execute the provided 'chroot' wrapper" } main_install() { [[ $# == 0 ]] || die "Too many arguments" gentoo_umount install_stage3 gentoo_chroot "$GENTOO_BOOTSTRAP_BIND/scripts/main.sh" install_gentoo_in_chroot } main_chroot() { gentoo_chroot "$@" } main_umount() { gentoo_umount } ################################################ # Main dispatch # Instantly kill when pressing ctrl-c trap 'kill "$GENTOO_BOOTSTRAP_SCRIPT_PID"' INT SCRIPT_ALIAS="$(basename "$0")" if [[ "$SCRIPT_ALIAS" == "main.sh" ]]; then SCRIPT_ALIAS="$1" shift fi case "$SCRIPT_ALIAS" in "chroot") main_chroot "$@" ;; "install") main_install "$@" ;; "install_gentoo_in_chroot") main_install_gentoo_in_chroot "$@" ;; "umount") main_umount "$@" ;; *) die "Invalid alias '$SCRIPT_ALIAS' was used to execute this script" ;; esac