linux_wiki:arch_linux_post_install_config

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

linux_wiki:arch_linux_post_install_config [2015/04/12 23:45]
billdozor
linux_wiki:arch_linux_post_install_config [2019/05/25 23:50]
Line 1: Line 1:
-====== Arch Linux Post Install Config ====== 
  
-**General Information** 
- 
-This is a bash script written in 2011 as a project that walked through the Arch Linux configuration guide after a fresh install. The point was to quickly customize a system, without taking away the level of control that performing this manually would. 
- 
-It is a long script and uses some interesting bash syntax, that I often refer back to for examples. 
- 
-**Checklist** 
-  * Distro: Last tested on Arch Linux 2011.08; mainly used to refer to for syntax. 
- 
----- 
- 
-===== The Script ===== 
- 
-<code bash arch_config.sh> 
-#!/bin/bash 
- 
-## Arch Linux Post Install Interactive-Config 
-## Author: Bill Howe, 10/22/2011 
-## Version: 0.6b (beta) 
-## 
-## -Description: This bash script walks a user through the recommended 
-### post installation setup of an Arch Linux build. The items that are 
-### configured via this script are: network config/testing, pacman mirrors, 
-### system upgrade, standard user account creation, sudo install/config, 
-### install Xorg (X Windows), Video Drivers, Testing Xorg, Installing fonts, 
-### installing a desktop environment, and creating GUI startup files in the 
-### proper user directories. (.xinitrc files) 
-### 
-### -Arch Versions: Works with 2010.05 and 2011.08 64 and 32 bit core install. 
-### All other versions untested, but should work with all net installs. 
-### 
-### -Known Issue: If the list of countries is displayed a 2nd time (user 
-###   selects a country but changes mind) Czech Republic and Great Britain 
-###   display an "unary operator expected" error.  
-clear 
-echo -e "===== Arch Linux Post Install Interactive-Config (0.6b) =====" 
-echo -e "\n#Welcome to the Arch Linux Post Install Config." 
-echo -e "--This interactive script walks you through the Arch Linux Wiki's" 
-echo -e "--post installation guide." 
-echo -e "\n#If at any point you see an option in brackets, like [example]," 
-echo -e "--pressing ENTER will default to that option." 
- 
-echo -e "\n>>Press [ENTER] to start this script[]:\c" 
-read 
-###################### START: CONFIGURE NETWORK ######################## 
-clear 
-echo -e "(1/11) Test For Internet Connection" 
- 
-#Initial ping test, this will work if the network daemon was successful 
-echo -e "#Attempting to ping www.archlinux.org...\c" 
-PINGRESULTS=`ping -c 3 www.archlinux.org | awk '/transmitted/{print $6}' | sed 's/%//'` 
- 
-if [ -z "$PINGRESULTS" -o "$PINGRESULTS" = 100 ] ; then 
-  echo -e "\n#Connection Issue detected: Failed DNS resolution or 100% packet loss." 
-  echo -e ">>What network interface should we use?[eth0]:\c" 
-  read NETINTERFACE 
-   
-  # if undefined (user just pressed enter) default setting: 
-  if [ -z "$NETINTERFACE" ] ; then 
-    NETINTERFACE="eth0" 
-  fi 
-   
-  echo -e "\n#Attempting to manually start DHCP services on [$NETINTERFACE]..." 
-  ifconfig $NETINTERFACE up 
-  dhcpcd -k $NETINTERFACE 
-  dhcpcd -n $NETINTERFACE 
- 
-  echo -e "\n#Will attempt to test ping again." 
-  echo -e ">>Enter website to ping[www.archlinux.org]:\c" 
-  read WEBSITE 
-   
-  # if undefined (user just pressed enter) default setting: 
-  if [ -z "$WEBSITE" ] ; then 
-    WEBSITE="www.archlinux.org" 
-  fi 
-   
-  echo -e "\n#Attempting to ping $WEBSITE...\c" 
-  PINGRESULTS=`ping -c 3 $WEBSITE | awk '/transmitted/{print $6}' | sed 's/%//'` 
-   
-  if [ -z "$PINGRESULTS" -o "$PINGRESULTS" = 100 ] ; then 
-    echo -e "\n#Connection Issue detected: Failed DNS resolution or 100% packet loss." 
-    echo -e ">>Set Static Network Information?(y/n) [y]:\c" 
-    read STATICNETWORK 
-     
-    if [ -z "$STATICNETWORK" ] ; then 
-      STATICNETWORK="y" 
-    fi 
-     
-    #setup static network until user says its correct 
-    while true ; do 
-     
-      case $STATICNETWORK in 
-        [yY]) 
-           echo -e ">>IP address:\c" 
-           read IP 
-           echo -e ">>Subnet Mask:\c" 
-           read MASK 
-           echo -e ">>Default Gateway:\c" 
-           read GW 
-           echo -e ">>DNS [Default: Google's Public DNS]:\c" 
-           read DNS 
-           
-           # If DNS not set, use Google's 
-           if [ -z "$DNS" ] ; then 
-             DNS="8.8.8.8" 
-           fi 
-           
-           echo -e "\n#Static Network Information" 
-           echo -e "--IP Address: $IP" 
-           echo -e "--Subnet Mask: $MASK" 
-           echo -e "--Default Gatewa: $GW" 
-           echo -e "--Name Server: $DNS" 
-           echo -e ">>Is this correct?(y/n) [y]:\c" 
-           read CORRECT 
-            
-           if [ -z "$CORRECT" ] ; then 
-             CORRECT="y" 
-           fi 
-            
-           case $CORRECT in 
-              [yY]) 
-        # Setup Static Network 
-               ifconfig eth0 $IP netmask $MASK up 
-               route add default gw $GW 
-                
-               # Add the nameserver to the first line in resolv.conf 
-               sed -i '1i'"nameserver $DNS" /etc/resolv.conf 
-                
-               echo -e "\n#Will attempt to test ping again." 
-               echo -e ">>Enter website to ping[www.archlinux.org]:\c" 
-               read WEBSITE 
-                
-               # if undefined (user just pressed enter) default setting: 
-               if [ -z "$WEBSITE" ] ; then 
-                 WEBSITE="www.archlinux.org" 
-               fi 
-   
-               echo -e "\n#Attempting to ping $WEBSITE...\c" 
-               PINGRESULTS=`ping -c 3 $WEBSITE | awk '/transmitted/{print $6}' | sed 's/%//'` 
-               if [ -z "$PINGRESULTS" -o "$PINGRESULTS" = 100 ] ; then 
-                 # All automated attempts at network setup have failed, exit program. 
-                 echo -e "\n#ERROR! Static Network configuration failed to ping the domain." 
-                 echo -e "--Please troubleshoot manually.\n" 
-                 exit 1 
-               fi 
-                
-               #If we get here, static network config successful, break out of loop 
-               echo -e "\n#Static network configuration successful." 
-               break 
-             ;; 
-             *) 
-              # set static network info again 
-              echo -e "\n#Config reported as incorrect, please set again.\n" 
-              continue 
-             ;; 
-           esac # END of "is this CORRECT" case check 
-            
-        ;; #END of "YES, set static ip" 
-         
-        *) #User Does not want to setup a static network and Dynamic Config failed, exit. 
-          echo -e "#ERROR in configuring network. Script will exit, please troubleshoot manually.\n" 
-          exit 1 
-        ;; 
-      esac #End of static network case check 
-   done #End of loop to set static network info until correct 
-    
-  fi # END of secondary ping check (after prompting for website) 
-fi # END of initial ping attempt check statement 
- 
-# Pings now successful, continue. 
-echo -e "\n\n#Internet connection succeeded." 
-echo -e ">>Press [Enter] to continue[]:\c" 
-read 
-####################### END: CONFIGURE NETWORK ######################### 
- 
-####################### START: CONFIGURE PACMAN ######################## 
-clear 
-echo -e "(2/11) Configure Pacman" 
- 
-# Check to see if architecture is 64 bit, if so, offer to use multilib 
-ARCH=`uname -m` 
- 
-if [ "$ARCH" = "x86_64" ] ; then 
- 
-  echo -e "#The multilib repository enables 32-bit applications on Arch x86_64." 
-  echo -e ">>Enable multilib? (y/n) [n]:\c" 
-  read ENABLEMULTILIB 
- 
-  # if undefined (user just pressed enter) default setting: 
-  if [ -z "$ENABLEMULTILIB" ] ; then 
-    ENABLEMULTILIB="n" 
-  fi 
- 
-  if [ "$ENABLEMULTILIB" = "y" -o "$ENABLEMULTILIB" = "Y" ] ; then 
-    echo -e "[multilib]" >> /etc/pacman.conf 
-    echo -e "Include = /etc/pacman.d/mirrorlist" >> /etc/pacman.conf 
-    echo -e "--Multilib enabled!" 
-  else 
-    echo -e "--Multilib NOT enabled." 
-  fi 
-fi 
- 
-#Set Internal field separator to a literal new line ("\n" doesn't work) 
-#This is required to properly build the COUNTRYLIST array 
-IFS=' 
-' 
- 
-#Create an array of the countries 
-#awk:Change field seperator to newline, search mirrorlist for lines that have "# .*" at the beginning 
-#awk:print that field (should be a country name) pipe to sed 
-#sed: filter out Lines that aren't countries (Arch, Generated, Any) and remove "# "'s 
-COUNTRYLIST=(`awk -F"\n" '/^##* .*/ {print $1}' /etc/pacman.d/mirrorlist | sed '/Arch/d;/Generated/d;/Any/d;s/##* //'`) 
- 
-#Get total number of countries found 
-NUMCOUNTRIES=${#COUNTRYLIST[*]} 
- 
-# Loop through country selection until a valid country is selected 
-#### START OF SELECT COUNTRY WHILE LOOP #### 
-while true ; do 
-echo -e "\n#Enter a country to use for the mirror list" 
- 
-#Loop through list and display countries in two columns 
-INDEX=0 
-while [ $INDEX -lt $NUMCOUNTRIES ] ; do 
- 
-  echo -e "$((INDEX+1))) ${COUNTRYLIST[$INDEX]}\c" 
- 
-  #Check to see if country has spaces. if yes: echo only 1 tab, otherwise 2 tabs 
-  if [ `echo "${COUNTRYLIST[$INDEX]}" | grep " "` ] ; then 
-    echo -e "\t\c" 
-  else 
-    echo -e "\t\t\c" 
-  fi 
-  (( INDEX=INDEX+1 )) 
- 
-  #If the new index is out of range, break out of the while loop 
-  if [ $INDEX -ge $NUMCOUNTRIES ] ; then break ; fi 
-   
-  echo -e "$((INDEX+1))) ${COUNTRYLIST[$INDEX]}" 
-  (( INDEX=INDEX+1 )) 
-done 
- 
-echo -e "\n>>Country? (1-$NUMCOUNTRIES) [United States]:\c" 
-read ENTERCOUNTRY 
- 
-#Reset Internal field separator to a space 
-IFS=' ' 
- 
-# if undefined (user just pressed enter) default setting: 
-if [ -z $ENTERCOUNTRY ] ; then 
-  COUNTRY="United States" 
- 
-#Otherwise, assign the country based upon the number (-1 to offset menu starting 
-#at 1 instead of zero) 
-elif [ $ENTERCOUNTRY -ge 1 -a $ENTERCOUNTRY -le $NUMCOUNTRIES ] ; then 
-  COUNTRY="${COUNTRYLIST[$ENTERCOUNTRY-1]}" 
- 
-else 
-  echo -e "#WARNING: Country entered out of range! Enter [1-$NUMCOUNTRIES]!" 
-  echo -e ">>[ENTER] to try again[]:\c" 
-  read 
-  continue 
-fi 
- 
-echo -e "--Country set to: $COUNTRY" 
-echo -e ">>Is this correct? (y/n) [y]:\c" 
-read CORRECT 
- 
-#if user just pressed enter, assume yes 
-if [ -z "$CORRECT" ] ; then 
-  CORRECT="y" 
-fi 
- 
-# If the country is correct, break out of while loop, if not, ask for country again 
-if [ "$CORRECT" = "y" -o "$CORRECT" = "Y" ] ; then 
-  break 
-fi 
- 
-done 
-#### END OF SELECT COUNTRY WHILE LOOP #### 
- 
-echo -e "\n#Backing up original mirrorlist..." 
-cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.backup 
- 
-# Reset all servers to commented 
-echo -e "#Preparing mirrorlist for parsing (placing all servers as commented)..." 
-sed -i 's/^Server/#Server/' /etc/pacman.d/mirrorlist 
- 
-echo -e "#Creating custom mirrorlist from [$COUNTRY] server list..." 
-# Find all mirrors in specified country with awk, save to countryMirrors file 
-awk -v COUNTRY="$COUNTRY" '/^# ..*/ && start==1 {start=0};$0 ~ COUNTRY {start=1};/^#Server/ && start==1 {print $0}' /etc/pacman.d/mirrorlist > /etc/pacman.d/countryMirrors 
- 
-# Insert country name, commented at top of list 
-sed -i '1i '"# $COUNTRY" /etc/pacman.d/countryMirrors 
- 
-echo -e "#Enabling all [$COUNTRY] mirrors..." 
-# Uncomment all mirrors from countryMirrors with sed 
-sed -i 's/^#Server/Server/' /etc/pacman.d/countryMirrors 
- 
-echo -e "#Writing [$COUNTRY] Mirrors to mirrorlist..." 
-cat /etc/pacman.d/countryMirrors > /etc/pacman.d/mirrorlist 
- 
-echo -e "\n#Refreshing mirrors..." 
-pacman -Syy 
- 
-echo -e "\n#Checking for rankmirrors (curl)..." 
-while true ; do 
-  # Check to see if curl is installed, if so exit loop, if not run pacman 
-  CURLDIR=`which curl` 
-  if [ "$CURLDIR" = "/usr/bin/curl" ] ; then 
-    break 
-  fi 
-  echo -e "\n#Installing rankmirrors (curl)..." 
-  pacman -S --noconfirm curl 
-done 
- 
-echo -e "\n#Ranking Top 6 mirrors..." 
-rankmirrors -n 6 /etc/pacman.d/countryMirrors > /etc/pacman.d/mirrorlist 
- 
-echo -e "#Refreshing all packages...\n" 
-pacman -Syy 
-echo -e "\n#Configuring Pacman completed." 
-echo -e ">>Press [Enter] to continue[]:\c" 
-read 
-######################## END: CONFIGURE PACMAN ######################### 
- 
-######################## START: UPGRADE SYSTEM ######################### 
-clear 
-echo -e "(3/11) System Upgrade" 
- 
-echo -e ">>Press [ENTER] to perform a full system update[]:\c" 
-read 
- 
-echo -e "\n#Upgrading all packages..." 
-pacman -Syu --noconfirm 
- 
-echo -e "\n#System upgrade completed." 
-echo -e ">>Press [Enter] to continue[]:\c" 
-read 
-######################## END: UPGRADE SYSTEM ######################### 
- 
-###################### START: ADD A USER ACCOUNT ####################### 
-clear 
-echo -e "(4/11) Add A Standard User" 
- 
-# Loop to prompt for user account creation until quit detected 
-while true ; do 
-  echo -e ">>Add a standard user?(y/n) [y]:\c" 
-  read ADDUSER 
- 
-  # if undefined (user just pressed enter) default setting: 
-  if [ -z "$ADDUSER" ] ; then 
-    ADDUSER="y" 
-  fi 
- 
-  case $ADDUSER in 
-    [yY]) 
-        #prompt for info 
-        echo -e ">>Username:\c" 
-        read USERNAME 
-        echo -e ">>Initial Group[users]:\c" 
-        read INITIALGROUP 
-         
-        # if undefined (user just pressed enter) default setting: 
-        if [ -z "$INITIALGROUP" ] ; then 
-          INITIALGROUP="users" 
-        fi 
-       
-        echo -e ">>Additional Groups[audio,lp,optical,storage,video,wheel,games,power,scanner]:\c" 
-        read ADDGROUPS 
-         
-        # if undefined (user just pressed enter) default setting: 
-        if [ -z "$ADDGROUPS" ] ; then 
-          ADDGROUPS="audio,lp,optical,storage,video,wheel,games,power,scanner" 
-        fi 
-       
-        echo -e ">>Shell [/bin/bash]:\c" 
-        read SHELL 
-         
-        # if undefined (user just pressed enter) default setting: 
-        if [ -z "$SHELL" ] ; then 
-          SHELL="/bin/bash" 
-        fi 
-       
-        echo -e "\n#The following user account will be created:" 
-        echo -e "--User: $USERNAME" 
-        echo -e "--Initial Group: $INITIALGROUP" 
-        echo -e "--Additional Groups: $ADDGROUPS" 
-        echo -e "--Shell: $SHELL" 
-       
-        echo -e ">>OK to create?(y/n) [y]:\c" 
-        read CREATEUSER 
-         
-        # if undefined (user just pressed enter) default setting: 
-        if [ -z "$CREATEUSER" ] ; then 
-          CREATEUSER="y" 
-        fi 
-         
-        if [ "$CREATEUSER" = "y" -o "$CREATEUSER" = "Y" ] ; then 
-          echo -e "\n#Creating user account..." 
-          useradd -m -g $INITIALGROUP -G $ADDGROUPS -s $SHELL $USERNAME 
-         
-          echo -e ">>Set Password for \"$USERNAME\"" 
-          passwd $USERNAME 
-          echo -e "" 
-           
-          else 
-            echo -e "\n#User account \"$USERNAME\" will NOT be created." 
-        fi 
-    ;; # Create user account "yes" case done 
-    *) # No, do not create user account. Exit loop 
-      echo -e "#Exiting user account creation tool..." 
-      break 
-    ;; 
-  esac 
-done 
-echo -e "\n#Adding user account(s) completed." 
-echo -e ">>Press [Enter] to continue[]:\c" 
-read 
-######################## END: ADD A USER ACCOUNT ####################### 
- 
-######################## START: INSTALL SUDO ########################### 
-clear 
-echo -e "(5/11) Install Sudo\n" 
- 
-echo -e "\n#Checking to see if Sudo is installed..." 
-SUDODIR=`which sudo` 
-if [ "$SUDODIR" = "/usr/bin/sudo" ] ; then  
-  echo -e "\n#Sudo appears to be installed. Skipping this section..." 
-else  
-  echo -e "\n>>Sudo not detected, proceed with installing?(y/n) [y]:\c" 
-  read INSTALLSUDO 
-   
-  # if undefined (user just pressed enter) default setting: 
-  if [ -z "$INSTALLSUDO" ] ; then 
-    INSTALLSUDO="y" 
-  fi 
-   
-  if [ "$INSTALLSUDO" = "y" -o "$INSTALLSUDO" = "Y" ] ; then 
-    echo -e "#Installing sudo..." 
-    pacman -S --noconfirm sudo 
-     
-    echo -e "===================================================================" 
-    echo -e "\n--You must now edit the /etc/sudoers file to give sudo access." 
-    echo -e "--This can be given to the wheel group or a single user." 
-     
-    echo -e "\n#Wheel Group: Remove the comment('#') from this line:" 
-    echo -e "-- # %wheel ALL=(ALL) ALL" 
-     
-    echo -e "\n#Single User: Find \"root ALL=(ALL) ALL\" and add this under it:" 
-    echo -e "-- \"username ALL=(ALL) ALL\"" 
-    echo -e "-- You should replace \"username\" with the proper user account" 
-     
-    echo -e "\n>>Edit using vi or nano? (vi/nano) [nano]:\c" 
-    read VISUDOEDITOR 
-     
-    # if undefined (user just pressed enter) default setting: 
-    if [ -z "$VISUDOEDITOR" ] ; then 
-      VISUDOEDITOR="nano" 
-    fi 
-     
-    if [ "$VISUDOEDITOR" = "vi" ] ; then 
-       EDITOR=vi visudo 
-     else 
-       EDITOR=nano visudo 
-    fi 
-  else 
-    echo -e "#Sudo will NOT be installed..." 
-  fi 
-fi 
-echo -e "\n#Configuring Sudo completed." 
-echo -e ">>Press [Enter] to continue[]:\c" 
-read 
-######################## END: INSTALL SUDO ############################# 
- 
-###################### START: INSTALL X Windows ######################## 
-clear 
-echo -e "(6/11) Install X Window System" 
- 
-echo -e "\n#The Xorg packages allow for basic graphics support." 
-echo -e "#These packages are a requirement if you want to install a graphical" 
-echo -e "#environment. They can be skipped if you have no need for a GUI." 
-echo -e "\n>>Install Xorg Base Packages?(y/n) [y]:\c" 
-read INSTALLXORG 
-  
-# if undefined (user just pressed enter) default setting: 
-if [ -z "$INSTALLXORG" ] ; then 
-  INSTALLXORG="y" 
-fi 
- 
-if [ "$INSTALLXORG" = "y" -o "$INSTALLXORG" = "Y" ] ; then 
-    echo -e "#Installing X Base Packages..."   
-    pacman -S --noconfirm xorg-server xorg-xinit xorg-utils xorg-server-utils 
-    XORGINSTALLED="yes" 
-     
-    echo -e "\n>>Install Mesa for 3D support? (y/n) [y]:\c" 
-    read INSTALLMESA 
-     
-    # if undefined (user just pressed enter) default setting: 
-    if [ -z "$INSTALLMESA" ] ; then 
-      INSTALLMESA="y" 
-    fi 
-     
-    if [ "$INSTALLMESA" = "y" -o "$INSTALLMESA" = "Y" ] ; then 
-       echo -e "#Installing mesa..." 
-       pacman -S --noconfirm mesa 
-      else 
-        echo -e "--Mesa NOT installed." 
-    fi 
- else 
-    echo -e "\n--Xorg will NOT be installed." 
-    XORGINSTALLED="no" 
-fi 
-echo -e "\n#Configuring X Windows completed." 
-echo -e ">>Press [Enter] to continue[]:\c" 
-read 
-####################### END: INSTALL X Windows ######################### 
- 
-##################### START: INSTALL VIDEO DRIVER ###################### 
-clear 
-echo -e "(7/11) Install Video Driver" 
- 
-if [ "$XORGINSTALLED" = "yes" ] ; then 
- 
-# Find VGA controller 
-VGA=`lspci | grep "VGA" | awk '/VGA/{print $5}'` 
- 
-echo -e "\n#You appear to have a $VGA graphics controller." 
-echo -e "#I will search pacman for possible drivers...\n" 
-pacman -Ss xf86-video | grep -i "$VGA" 
-echo -e "\n--Done listing possible drivers via auto search." 
- 
-while true ; do 
-  echo -e "\n#What would you like to do?" 
-  echo -e "--1)Enter driver name now" 
-  echo -e "--2)Install generic vesa driver" 
-  echo -e "--3)Install NVIDIA driver(nvidia or nouveau)" 
-  echo -e "--4)Install ATI driver(xf86-video-ati)" 
-  echo -e "--5)List all drivers so I can decide" 
-  echo -e "--0)Skip installing a video driver" 
-  echo -e ">> (0-5):\c" 
-  read VIDEOCHOICE 
- 
-  case $VIDEOCHOICE in 
-    1) 
-      echo -e "\n#Enter full name of video driver (ex: xf86-video-vesa)" 
-      echo -e ">>Driver name:\c" 
-      read DRIVERNAME 
-       
-      echo -e ">>Attempt to install $DRIVERNAME?(y/n) [y]:\c" 
-      read ATTEMPTINSTALL 
-       
-      # if undefined (user just pressed enter) default setting: 
-      if [ -z "$ATTEMPTINSTALL" ] ; then 
-        ATTEMPTINSTALL="y" 
-      fi 
-       
-      if [ "$ATTEMPTINSTALL" = "y" -o "$ATTEMPTINSTALL" = "Y" ] ; then 
-        if [ "pacman -S $DRIVERNAME" ] ; then 
-          echo -e "#Installing $DRIVERNAME..." 
-          pacman -S --noconfirm "$DRIVERNAME" 
-          VIDEOINSTALLED="yes" 
-          break 
-        else 
-          echo -e "--Driver not found!" 
-          continue 
-        fi 
-          echo -e "--Aborting driver installation..." 
-          continue 
-      fi 
-    ;; 
-    2) 
-      echo -e "\n#Install Generic Vesa Driver. Are you sure? (y/n) [y]:\c" 
-      read CONFIRM 
-       
-      if [ -z "$CONFIRM" ] ; then 
-        CONFIRM="y" 
-      fi 
-       
-      if [ "$CONFIRM" = "y" -o "$CONFIRM" = "Y" ] ; then 
-        echo -e "\n#Installing generic vesa driver..." 
-        pacman -S --noconfirm xf86-video-vesa 
-        VIDEOINSTALLED="yes" 
-        break 
-      else 
-        echo -e "--Aborting vesa driver install..." 
-        continue 
-      fi 
-    ;; 
-    3) 
-      echo -e "\n#Choose a Nvidia driver" 
-      echo -e "--1) Nvidia Proprietary Driver (nvidia)" 
-      echo -e "--2) Nvidia Open Source Driver (nouveau)" 
-      echo -e ">>(1 or 2):\c" 
-      read NVIDIADRIVER 
-       
-      if [ "$NVIDIADRIVER" = "1" ] ; then 
-         echo -e "\n#Install proprietary nvidia driver. Are you sure? (y/n) [y]:\c" 
-         read CONFIRM 
-         
-         if [ -z "$CONFIRM" ] ; then 
-           CONFIRM="y" 
-         fi 
-         
-         if [ "$CONFIRM" = "y" -o "$CONFIRM" = "Y" ] ; then 
-           echo -e "#Installing Nvidia Proprietary Driver..." 
-           pacman -S --noconfirm nvidia 
-           VIDEOINSTALLED="yes" 
-           break 
-         else 
-           echo "#Aborting proprietary nvidia driver install..." 
-           continue 
-         fi 
-      elif [ "$NVIDIADRIVER" = "2" ] ; then 
-         echo -e "\n#Install open source nouveau driver. Are you sure? (y/n) [y]:\c" 
-         read CONFIRM 
-         
-         if [ -z "$CONFIRM" ] ; then 
-           CONFIRM="y" 
-         fi 
-         
-         if [ "$CONFIRM" = "y" -o "$CONFIRM" = "Y" ] ; then 
-           echo -e "#Installing Nvidia Open Source Driver (nouveau)..." 
-           pacman -S --noconfirm xf86-video-nouveau 
-           VIDEOINSTALLED="yes" 
-           break 
-         else 
-           echo -e "#Aborting open source nouveau driver install..." 
-           continue 
-         fi 
-      else 
-         echo -e "#Invalid selection!" 
-         continue 
-      fi 
-    ;; 
-    4) 
-      echo -e "\n#Install ATI driver. Are you sure? (y/n) [y]:\c" 
-      read CONFIRM 
-         
-      if [ -z "$CONFIRM" ] ; then 
-        CONFIRM="y" 
-      fi 
-         
-      if [ "$CONFIRM" = "y" -o "$CONFIRM" = "Y" ] ; then 
-        echo -e "\n#Installing ATI driver..." 
-        pacman -S --noconfirm xf86-video-ati 
-        VIDEOINSTALLED="yes" 
-        break 
-      else 
-        echo -e "#Aborting ATI driver install..." 
-        continue 
-      fi 
-    ;; 
-    5) 
-      echo -e "\n#I will now list possible drivers to install with the \"less\" program." 
-      echo -e ">>Press 'q' when you are done looking. [ENTER] to continue[]:\c" 
-      read 
-      pacman -Ss xf86-video | less 
-      echo -e "\n#I will now return you to the video driver menu to make your install selection." 
-      echo -e "--Once there, enter option '0' (zero) if you know what to install." 
-      echo -e ">>Press [ENTER] to continue[]:\c" 
-      read 
-      continue 
-    ;; 
-    0) 
-      echo -e "\n--Video Driver NOT installed." 
-      VIDEOINSTALLED="no" 
-      break 
-    ;; 
-    *) 
-      echo -e "\n#Invalid choice!" 
-      continue 
-    ;; 
-  esac 
-done 
- 
-else 
-  echo -e "#Skipping installation of video card driver since xorg is not installed..." 
-  VIDEOINSTALLED="no" 
-fi 
-echo -e "\n#Configuring Video Drivers completed." 
-echo -e ">>Press [Enter] to continue[]:\c" 
-read 
-###################### END: INSTALL VIDEO DRIVER ####################### 
- 
-######################## START: TEST X WINDOWS ######################### 
-clear 
-echo -e "(8/11) Testing X Window System" 
- 
-if [ "$XORGINSTALLED" = "yes" -a "$VIDEOINSTALLED" = "yes" ] ; then 
- 
-echo -e "\n#Both Xorg and a Video Driver have been installed." 
-echo -e ">>Press [ENTER] to install default test environment[]:\c" 
-read 
- 
-echo -e "\n#Installing default test environment..." 
-pacman -S --noconfirm xorg-twm xterm 
- 
-echo -e "\n#Installing Message bus (dbus)..." 
-pacman -S --noconfirm dbus 
- 
-echo -e "\n#Adding dbus to Daemons array (/etc/rc.conf)..." 
-sed -i 's/syslog-ng/syslog-ng dbus/' /etc/rc.conf 
- 
-echo -e "#Starting dbus (to avoid restart)..." 
-/etc/rc.d/dbus start 
- 
-echo -e "\n--Will now issue the command \"startx\" to test x environment" 
-echo -e "--If you see xterm consoles, type \"exit\" in each to exit back to here." 
- 
-echo -e "\n--If that does not work, attempt to kill x by typing \"pkill x\"." 
- 
-echo -e "\n--If pkill x does not work, or you can't see anything, attempt to " 
-echo -e "--reboot blindly by typing \"reboot\"" 
- 
-echo -e "\n>>Test X now?(y/n) [y]:\c" 
-read TESTX 
- 
-  # if undefined (user just pressed enter) default setting: 
-  if [ -z "$TESTX" ] ; then 
-    TESTX="y" 
-  fi 
- 
-  if [ "$TESTX" = "y" -o "$TESTX" = "Y" ] ; then 
-    startx 
-  else 
-    echo -e "\n--Skipping Test of X Windows." 
-  fi 
-   
-else 
-  echo -e "\n--Skipping test of X Windows since either Xorg or Video Drivers are not installed..." 
- 
-fi 
-echo -e "\n#Testing X Windows completed." 
-echo -e ">>Press [Enter] to continue[]:\c" 
-read 
-######################### END: TEST X WINDOWS ########################## 
- 
-######################## START: INSTALL FONTS ########################## 
-clear 
-echo -e "(9/11) Install Fonts" 
- 
-echo -e "\n#Installing true type fonts improves many dialog box text." 
-echo -e "#It is recommended to install them." 
-echo -e "\n>>Install dejavu true type fonts? (y/n) [y]:\c" 
-read INSTALLFONTS 
- 
-# if undefined (user just pressed enter) default setting: 
-if [ -z "$INSTALLFONTS" ] ; then 
-  INSTALLFONTS="y" 
-fi 
- 
-if [ "$INSTALLFONTS" = "y" -o "$INSTALLFONTS" = "Y" ] ; then 
-  echo -e "\n#Installing true type fonts..." 
-  pacman -S --noconfirm ttf-dejavu 
-else 
-  echo -e "\n#True type fonts will NOT be installed." 
-fi 
-echo -e "\n#Installing fonts completed."  
-echo -e ">>Press [Enter] to continue[]:\c" 
-read 
-######################## START: INSTALL FONTS ########################## 
- 
-########################### START: SELECT DE ########################### 
-clear 
-echo -e "(10/11) Install DE or WM" 
- 
-if [ "$XORGINSTALLED" = "yes" -a "$VIDEOINSTALLED" = "yes" ] ; then 
- 
-while true ; do 
- echo -e "\n#Would you like to install one of the following Desktop Environments?" 
- echo -e "--1) KDE" 
- echo -e "--2) Gnome" 
- echo -e "--3) Xfce" 
- echo -e "--0) Do not install any of these" 
- echo -e ">>(0-3):\c" 
- read DECHOICE 
- 
- case $DECHOICE in 
-   1) 
-     echo -e "\n#Installing KDE..." 
-     echo -e "#Ensuring system is up to date..." 
-     pacman -Syu --noconfirm 
-     pacman -S --noconfirm kde 
-      
-     echo -e "\n#KDE base installed." 
-      
-     break 
-   ;; 
-   2) 
-     echo -e "\n#Installing Gnome..." 
-     echo -e "#Ensuring system is up to date..." 
-     pacman -Syu --noconfirm 
-     pacman -S --noconfirm gnome 
-      
-     echo -e "\n#Gnome base installed." 
-     echo -e ">>Install Gnome-Extra Package?(y/n) [y]:\c" 
-     read GNOMEEXTRA 
-      
-     if [ -z "$GNOMEEXTRA" ] ; then 
-       GNOMEEXTRA="y" 
-     fi 
-      
-     if [ "$GNOMEEXTRA" = "Y" -o "$GNOMEEXTRA" = "y" ] ; then 
-       echo -e "\n#Installing Gnome-Extra..." 
-       pacman -S --noconfirm gnome-extra 
-      else 
-       echo -e "\n#Skipping installation of Gnome-Extra..." 
-     fi 
-      
-     break 
-   ;; 
-   3) 
-     echo -e "\n#Installing Xfce..." 
-     echo -e "#Ensuring system is up to date..." 
-     pacman -Syu --noconfirm 
-     pacman -S --noconfirm xfce4 
-      
-     echo -e "\n#Installing gstreamer plugins..." 
-     pacman -S --noconfirm gstreamer0.10-base-plugins 
-      
-     #echo -e "\n#Replacing fam with gamin..." 
-     #pacman -S --noconfirm gamin 
-      
-     echo -e "\n#Xfce4 base installed." 
-     echo -e ">>Install Xfce4 Goodies Package?(y/n) [y]:\c" 
-     read XFCEGOODIES 
-      
-     if [ -z "$XFCEGOODIES" ] ; then 
-       XFCEGOODIES="y" 
-     fi 
-      
-     if [ "$XFCEGOODIES" = "Y" -o "$XFCEGOODIES" = "y" ] ; then 
-       echo -e "\n#Installing Xfce4 Goodies..." 
-       pacman -S --noconfirm xfce4-goodies 
-      else 
-       echo -e "\n#Skipping installation of Xfce4 Goodies..." 
-     fi 
-     break 
-   ;; 
-   0) 
-     echo -e "#No desktop environment will be installed." 
-     break 
-   ;; 
-   *) 
-     echo -e "\n#Invalid Choice!" 
-     continue 
-   ;; 
- esac 
-done 
- 
-else 
-  echo -e "\n--Skipping installation of a Desktop Environment since either Xorg or Video Drivers are not installed..." 
- 
-fi 
- 
-echo -e "\n#Installing a Desktop Environment section completed." 
-echo -e ">>Press [Enter] to continue[]:\c" 
-read 
-############################ END: SELECT DE ############################ 
- 
-###################### START: SETUP GUI FOR USER ####################### 
-clear 
-echo -e "(11/11) Create User DE Startx Files (.xinitrc)" 
- 
-#If user did not install a DE, skip this section 
-if [ $DECHOICE = 0 ] ; then 
-  echo -e "\n#No Desktop Environment detected. Skipping this section..." 
-else 
- 
-echo -e "\n#In order for users to be able to start the desktop environment" 
-echo -e "--a .xinitrc file needs to be created in their home folder." 
-echo -e "\n#Once created, they will be able to start a graphical environment" 
-echo -e "--by typing \"startx\" after login." 
- 
-#Check to see what DE was installed (1=KDE,2=GNOME,3=XFCE) 
-case $DECHOICE in 
-  1) #KDE 
-    echo -e "\n#KDE detected." 
-    STARTX="exec ck-launch-session startkde" 
-  ;; 
-  2) #GNOME 
-    echo -e "\n#Gnome detected." 
-    STARTX="exec ck-launch-session gnome-session" 
-  ;; 
-  3) #XFCE 
-    echo -e "\n#Xfce detected." 
-    STARTX="exec ck-launch-session dbus-launch --exit-with-session startxfce4" 
-  ;; 
-  *) #Catch-all, should not get here 
-    echo -e "\n#Error detecting a desktop environment. Now exiting..." 
-    exit 1 
-  ;; 
-esac 
- 
-#Set Internal field separator to a literal new line ("\n" doesn't work) 
-IFS=' 
-' 
-#Create array of all standard users (group 100) 
-USERLIST=(`awk -F":" '/100/ {print $1}' /etc/passwd`) 
- 
-#Get total number of users 
-TOTALUSERS=${#USERLIST[*]} 
- 
-###START WHILE LOOP TO SELECT A VALID USER ### 
-while true ; do 
- 
-  #Display all standard users for selection 
-  echo -e "\n#The following standard users were discovered:" 
- 
-  #Loop through array, print users in columns of two 
-  INDEX=0 
-  while [ $INDEX -lt $TOTALUSERS ] ; do 
- 
-    #We want the option 0 to be "all users", so make a special case 
-    if [ $INDEX = 0 ] ; then 
-      echo -e "$INDEX) All Users\t\c" 
-    else 
-    #otherwise, output the index+1 for the menu selection, since we used 0 for all users 
-    #The index of the actual data stays the same  
-      echo -e "$((INDEX+1))) ${USERLIST[$INDEX]}\t\c" 
-      (( INDEX=INDEX+1 )) 
-    fi 
-     
-    #If the previous mid-loop increment went equal/above the total users, break 
-    if [ $INDEX -ge $TOTALUSERS ] ; then break ; fi 
-     
-    #Output 2nd column of users 
-    echo -e "$((INDEX+1))) ${USERLIST[$INDEX]}" 
-    (( INDEX=INDEX+1 )) 
-   
-  done 
- 
-  echo -e "\n>>Create startx files for who? (0-$TOTALUSERS) [0]:\c" 
-  read WHATUSERS 
- 
-  #User just pressed ENTER, use default of all users 
-  if [ -z $WHATUSERS ] ; then 
-    WHATUSERS=0 
-    break 
-  elif [ $WHATUSERS -ge 0 -a $WHATUSERS -le $TOTALUSERS ] ; then 
-    #just break, since WHATUSERS is valid 
-    break 
-  else 
-    echo -e "#Warning: Invalid user selection. Please use [0-$TOTALUSERS]." 
-    echo -e ">>Press [ENTER] to try again.[]\c" 
-    read 
-    continue 
-  fi 
- 
-done 
-### END OF WHILE LOOP TO GET VALID USER SELECTION ### 
- 
-#Copy skeleton .xinitrc to each users home folder and give them ownership 
-#Append the correct startx command to each file 
- 
-if [ $WHATUSERS = 0 ] ; then 
-  # 0 = All users: loop through user list and create the .xinitrc for each user 
-  for INDEX in ${USERLIST[*]} ; do 
-    cp /etc/skel/.xinitrc "/home/$INDEX/.xinitrc" 
-    chown "$INDEX:users" "/home/$INDEX/.xinitrc" 
-    echo "$STARTX" >> "/home/$INDEX/.xinitrc" 
-    echo -e "#Created /home/$INDEX/.xinitrc" 
-  done 
-else 
-  #Only do this for a specific user (subtract 1 to offset the all users menu category 
-  cp /etc/skel/.xinitrc "/home/${USERLIST[$WHATUSERS-1]}/.xinitrc" 
-  chown "${USERLIST[$WHATUSERS-1]}:users" "/home/${USERLIST[$WHATUSERS-1]}/.xinitrc" 
-  echo "$STARTX" >> "/home/${USERLIST[$WHATUSERS-1]}/.xinitrc" 
-  echo -e "#Created /home/${USERLIST[$WHATUSERS-1]}/.xinitrc" 
-fi 
- 
-fi #end of initial if statement 
-echo -e "\n#Done creating the startx file(s)."  
-echo -e ">>Press [ENTER] to continue[]:\c" 
-read 
-####################### END: SETUP GUI FOR USER ######################## 
- 
-echo -e "\n==== Arch Post Install Interactive Config Script Complete! ====\n" 
-exit 
-</code> 
  • linux_wiki/arch_linux_post_install_config.txt
  • Last modified: 2019/05/25 23:50
  • (external edit)