#!/bin/sh depend_procedure core base # esp for auto_{network,locale,fstab} workers # This is a port of the original /arch/setup script. It doesn't use fifa phases but uses it's own menu-based flow (phase) control TARGET_DIR="/mnt" EDITOR= # clock HARDWARECLOCK= TIMEZONE= # partitions PART_ROOT= # default filesystem specs (the + is bootable flag) # ::[:+] DEFAULTFS="/boot:32:ext2:+ swap:256:swap /:7500:ext3 /home:*:ext3" start_process () { ##################### ## begin execution ## # install stages S_SRC=0 # choose install medium S_NET=0 # network configuration S_CLOCK=0 # clock and timezone S_PART=0 # partitioning S_MKFS=0 # formatting S_MKFSAUTO=0 # auto fs part/formatting TODO: kill this S_SELECT=0 # package selection S_INSTALL=0 # package installation S_CONFIG=0 # configuration editing S_GRUB=0 # TODO: kill this - if using grub S_BOOT="" # bootloader installed (set to loader name instead of 1) var_UI_TYPE=dia notify "Welcome to the Arch Linux Installation program. The install \ process is fairly straightforward, and you should run through the options in \ the order they are presented. If you are unfamiliar with partitioning/making \ filesystems, you may want to consult some documentation before continuing. \ You can view all output from commands by viewing your VC7 console (ALT-F7). \ ALT-F1 will bring you back here." # menu item tracker- autoselect the next item NEXTITEM="" while true do mainmenu done } mainmenu() { if [ -n "$NEXTITEM" ]; then DEFAULT="--default-item $NEXTITEM" else DEFAULT="" fi DIALOG $DEFAULT --title " MAIN MENU " \ --menu "Use the UP and DOWN arrows to navigate menus. Use TAB to switch between buttons and ENTER to select." 16 55 8 \ "0" "Select Source" \ "1" "Set Clock" \ "2" "Prepare Hard Drive" \ "3" "Select Packages" \ "4" "Install Packages" \ "5" "Configure System" \ "6" "Install Bootloader" \ "7" "Exit Install" 2>$ANSWER NEXTITEM="$(cat $ANSWER)" case $(cat $ANSWER) in "0") execute worker select_source ; ret=$? if [ $ret -eq 0 -a "$var_PKG_SOURCE_TYPE" = "ftp" ]; then while true; do DIALOG --menu "FTP Installation" 10 35 3 \ "0" "Setup Network (Make sure the network is ok before continuing" \ "1" "Choose Mirror" \ "2" "Return to Main Menu" 2>$ANSWER case "$(cat $ANSWER)" in "0") execute worker runtime_network && S_NET=1;; "1") execute worker select_mirror ;; *) break ;; esac done fi [ $ret -eq 0 ] && S_SRC=1 && execute worker runtime_packages ;; "1") execute worker set_clock && S_CLOCK=1 ;; "2") execute worker prepare_disks ;; # stage set vars set in the worker "3") execute worker package_list && S_SELECT=1 ;; "4") execute worker install_packages && S_INSTALL=1 && { execute worker auto_fstab; execute worker auto_network; execute worker auto_locale; } ;; "5") execute worker configure_system && S_CONFIG=1 && { execute worker mkinitcpio; execute worker locales; } ;; "6") _dia_DIALOG --colors --menu "Which bootloader would you like to use? Grub is the Arch default.\n\n" 10 65 2 \ "GRUB" "Use the GRUB bootloader (default)" \ "None" "\Zb\Z1Warning\Z0\ZB: you must install your own bootloader!" 2>$ANSWER execute worker install_bootloader "`cat $ANSWER`";; "7") echo "" echo "If the install finished successfully, you can now type 'reboot'" echo "to restart the system." echo "" exit 0 ;; *) ask_yesno "Abort Installation?" && exit 0 ;; esac } configure_system() { ## PREPROCESSING ## # only done on first invocation of configure_system if [ $S_CONFIG -eq 0 ]; then # /etc/pacman.d/mirrorlist # add installer-selected mirror to the top of the mirrorlist if [ "$MODE" = "ftp" -a "${SYNC_URL}" != "" ]; then awk "BEGIN { printf(\"# Mirror used during installation\nServer = "${SYNC_URL}"\n\n\") } 1 " "${TARGET_DIR}/etc/pacman.d/mirrorlist" fi # /etc/rc.conf # insert timezone and utc info sed -i -e "s/^TIMEZONE=.*/TIMEZONE=\"$TIMEZONE\"/g" \ -e "s/^HARDWARECLOCK=.*/HARDWARECLOCK=\"$HARDWARECLOCK\"/g" \ ${TARGET_DIR}/etc/rc.conf fi interactive_configure_system run_mkinitcpio target_locale-gen } worker_prepare_disks() { S_MKFSAUTO=0 S_MKFS=0 DONE=0 NEXTITEM="" while [ "$DONE" = "0" ]; do if [ -n "$NEXTITEM" ]; then DEFAULT="--default-item $NEXTITEM" else DEFAULT="" fi DIALOG $DEFAULT --menu "Prepare Hard Drive" 12 60 5 \ "1" "Auto-Prepare (erases the ENTIRE hard drive)" \ "2" "Partition Hard Drives" \ "3" "Set Filesystem Mountpoints" \ "4" "Return to Main Menu" 2>$ANSWER NEXTITEM="$(cat $ANSWER)" case $(cat $ANSWER) in "1") interactive_autoprepare && S_MKFSAUTO=1 ;; "2") if [ "$S_MKFSAUTO" = "1" ]; then notify "You have already prepared your filesystems with Auto-prepare" else interactive_partition && S_PART=1 ;; fi "3") PARTFINISH="" if [ "$S_MKFSAUTO" = "1" ]; then notify "You have already prepared your filesystems with Auto-prepare" else interactive_mountpoints && S_MKFS=1 ;; fi *) DONE=1 ;; esac done NEXTITEM="1" } # set_clock() # prompts user to set hardware clock and timezone # # params: none set_clock() { interactive_set_clock } #[ $S_SELECT -eq 0 ] && install_pkg && S_INSTALL=1 # user must first select, then install # automagic time! # any automatic configuration should go here #notify "Writing base configuration..." #auto_fstab #auto_network #auto_locale worker_select_source () { #TODO: integrate setup-like source selecter here var_PKG_SOURCE_TYPE= var_FILE_URL="file:///src/core/pkg" var_SYNC_URL= var_MIRRORLIST="/etc/pacman.d/mirrorlist" # if you override to use ftp (or ask user and he chooses ftp) don't forget to configure the network and to select_mirrors interactive_select_source && S_SRC=1 && return 0 return 1 } # select_packages() # prompts the user to select packages to install worker_package_list() { # step dependencies if [ $S_SRC -eq 0 ]; then DIALOG --msgbox "You must select an installation source!" 0 0 return 1 fi # if selection has been done before, warn about loss of input # and let the user exit gracefully if [ $S_SELECT -ne 0 ]; then DIALOG --yesno "WARNING: Running this stage again will result in the loss of previous package selections.\n\nDo you wish to continue?" 10 50 || return 1 fi interactive_select_packages } worker_install_packages () { if [ $S_SELECT -eq 0 ]; then DIALOG --msgbox "You must select packages first." 0 0 return 1 fi installpkg && return 0 return 1 } # Hand-hold through setting up networking worker_runtime_network() { interactive_runtime_network } dogrub() { interactive_dogrub && S_GRUB=1 } worker_select_mirror () { interactive_select_mirror } # $1 which one worker_install_bootloader () { [ "$1" = grub ] && interactive_install_grub && S_BOOT=grub [ "$1" != grub ] && S_BOOT="$1" } # exit if network wasn't configured in installer # if [ $S_NET -eq 0 ]; then # return 1 # fi # ask_yesno "Do you want to use the network settings from the installer in rc.conf and resolv.conf?\n\nIf you used Proxy settings, they will be written to /etc/profile.d/proxy.sh" || return 1 #if [ $S_DHCP -ne 1 ]; then # auto_network #fi