Differences

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

Link to this comparison view

arch_inst_script [2018/03/06 08:59] (current)
Line 1: Line 1:
 +====== dertasiu'​s Arch Linux Install Script ======
 +This is a pretty nice set of scripts (install and post install) for installing Arch. I've tested them and I think they work fairly well, though I would like to tailor them to the way I do things. I am listing them on LJCK so if their github page goes down I still have them. If I make any changes I'll probably fork them to my own gi thub.
  
 +  * https://​github.com/​dertasiu/​arch-installer
 +  * License is GPLv3: https://​github.com/​dertasiu/​arch-installer/​blob/​master/​LICENSE
 +
 +<file sh install.sh>​
 +#!/bin/sh
 +: '​Copyright (C) 2015 Andrés Quiceno Hernández, Mario Gordillo Ortiz
 +
 +This program is free software: you can redistribute it and/or modify
 +it under the terms of the GNU General Public License as published by
 +the Free Software Foundation, either version 3 of the License, or
 +(at your option) any later version.
 +
 +This program is distributed in the hope that it will be useful,
 +but WITHOUT ANY WARRANTY; without even the implied warranty of
 +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ​ See the
 +GNU General Public License for more details.
 +
 +You should have received a copy of the GNU General Public License
 +along with this program. ​ If not, see <​http://​www.gnu.org/​licenses/>'​
 +
 +#!/bin/bash
 +
 +##Welcome message
 +dialog --backtitle "​ArchLinux Installation"​ --title "​Welcome"​ --msgbox '​Proceed to the installation:'​ 6 32
 +
 +##Keyboard selection
 +selected=0 #Set the variable $selected to 0, this will help to break the while
 +while [ $selected == "​0"​ ];do #Create the loop to select the keyboard
 + locales="​$(localectl list-keymaps | awk '​$locales=$locales"​ Keyboard"'​)"​ && locales=$(echo "​$locales"​) #List all tha locales avaiable and add it a "​Keyboard to the end, this is done because it have to fit in the menu. Then echo itself to generate a list.
 + keyboard=$(dialog --backtitle "​ArchLinux Installation"​ --clear --title "​Choose your keymap: " --menu "Hi! Choose your favorite keymap:"​ 0 0 0 ${locales} 2>&1 > /dev/tty) #Generate the menu and save the answer to a variable. Redirect the error output(Answer) and redirect all the menu to the terminal.
 + if [ $? == 0 ];then #If the answer is "​Accept"​...
 + loadkeys $keyboard #Load the selected keymap
 + keymap=$keyboard #Export the keyboard variable to use ir later
 + selected=1 #Get out the while
 + else #If the selection is cancel...
 + dialog --backtitle "​ArchLinux Installation"​ --msgbox "​Please,​ select the keyboard!"​ 6 32 #Ask the user to select the keyboard and rerun
 + fi
 +done
 +
 +##Activate WiFi if it needed
 +dialog --backtitle "​ArchLinux Installation"​ --title "WiFi Connection"​ --yesno "Do you want to connect to a wifi network?"​ 6 45 #Ask the user if wants to connect to a wifi network
 +case $? in #In the case that...
 + 0) wifi-menu #0(Accept) is pressed: open the wifi-menu
 + wifinet=$(netctl list | awk -F " " '​{print $2}'​);;​
 + 1) echo "​Continuing!";;​ #1(Cancel) is pressed: Do nothing
 +esac
 +
 +##Partition creation
 +#Display a list of all disk and partitions available
 +dialog --backtitle "​ArchLinux Installation"​ --title "Disk Selection"​ --msgbox '​Please select a disk to install ArchLinux'​ 6 45
 +fdisk -l > /​tmp/​partitions
 +dialog --backtitle "​ArchLinux Installation"​ --title "Disk Selection"​ --textbox /​tmp/​partitions 0 0
 +rm /​tmp/​partitions
 +
 +#Display a little devices list, selected disk will be saved to the variable $disk 
 +echo "print devices"​ > /​tmp/​parted.p #Save available disks in a temporary file
 +part="​$(parted < /​tmp/​parted.p | grep sd | awk '{if (NR!=1) {print}}'​)"​ #Process the temporary file, display only the line that have "​sd"​ and exclude the first line
 +rm /​tmp/​parted.p
 +disk=$(dialog --backtitle "​ArchLinux Installation"​ --clear --title "Disk Select: " ​ --menu "​Choose the Hard Drive that you want to use" 0 0 0 ${part} 2>&1 >/​dev/​tty)
 +
 +#Selection of the partition program
 +partitioner=$(dialog --backtitle "​ArchLinux Installation"​ --clear --title "​Choose partition maker program: " --menu "​Choose ​ your favorite partitioner:"​ 0 0 0\
 + "​cfdisk"​ "A ncurses based partitioner"​ \
 + "​fdisk"​ "A command line MBR partitioner"​ \
 + "​parted"​ "A command line partitioner"​ 2>&1 > /dev/tty)
 +$partitioner $disk
 +
 +#Show the partitions avaiable on the selected disk
 +fdisk -l "​$disk"​ > /​tmp/​partitions
 +dialog --backtitle "​ArchLinux Installation"​ --title "​Partition Selection"​ --textbox /​tmp/​partitions 0 0
 +
 +#Select the main partition
 +partitions="​$(cat /​tmp/​partitions | grep sd | awk '{if (NR!=1) {print}}'​ | sed '​s/​*//​g'​ | awk -F ' ' '​{print $1,​$5}'​)"​
 +p="​$(echo "​$partitions"​)"​
 +part=$(dialog --backtitle "​ArchLinux Installation"​ --clear --title "​Partition selection: " \
 + --menu "​Choose the partition that you want to use for: /" 0 0 0 ${p} 2>&1 > /dev/tty)
 +rootfs=$part
 +p=$(echo "​$p"​ | grep -v $part)
 +
 +#Declare the function that will format the partitions
 +partitioning(){
 + fs="​$(ls /bin/* | grep mkfs | awk '{if (NR!=1) {print}}'​ | sed '​s/​^.\{10\}//​g'​ | awk '​{print substr($0, 0, length($0)-0)}'​ | awk '​$fs=$fs"​ Type"'​ |  awk '{if (NR!=1) {print}}'​ | grep -v cramfs | grep -v hfsplus | grep -v  bfs | grep -v msdos | grep -v minix)"​
 + format=$(dialog --backtitle "​ArchLinux Installation"​ --clear --title "​Partition type: " \
 + --menu "​Choose the filesystem type that you want to use" 0 0 0 ${fs} 2>&1 > /dev/tty)
 + case $format in
 + ext2) mkfs.ext2 -F "​$part";;​
 + ext3) mkfs.ext3 -F "​$part";;​
 + ext4) mkfs.ext4 -F "​$part";;​
 + ext4dev) mkfs.ext4dev -F "​$part";;​
 + f2fs) modprobe f2fs
 + mkfs.f2fs "​$part";;​
 + jfs) mkfs.jfs -q "​$part";;​
 + nilfs2) mkfs.nilfs2 -f "​$part";;​
 + ntfs) mkfs.ntfs -q "​$part";;​
 + reiserfs) mkfs.reiserfs -f -f "​$part";;​
 + vfat) mkfs.vfat -F32 "​$part";;​
 + xfs) mkfs.xfs -f "​$part";;​
 + btrfs) mkfs.btrfs -f "​$part";;​
 + esac
 +}
 +
 +#Format the main partition
 +partitioning
 +
 +#View the available partitions and select the main partition
 +cmd=(dialog --backtitle "​ArchLinux Installation"​ --separate-output --checklist "​Select options:"​ 0 0 0)
 +options=("/​boot"​ "​Static files of the boot loader"​ off    # any option can be set to default to "​on"​
 + "/​home"​ "User home directoties"​ off
 + "/​tmp"​ "​Temporary files" off
 + "/​usr"​ "​Static data" off
 + "/​var"​ "​Variable data" off
 + "/​srv"​ "Data for services provided by this system"​ off
 + "/​opt"​ "​Add-on aplication software packages"​ off
 + "​swap"​ "Swap file sytem" off
 + )
 +choices=$("​${cmd[@]}"​ "​${options[@]}"​ 2>&1 >/​dev/​tty)
 +clear
 +for choice in $choices
 +do
 + case $choice in
 + "/​boot"​)
 + #Select the partition
 + dialog --backtitle "​ArchLinux Installation"​ --title "​Partition Selection"​ --textbox /​tmp/​partitions 0 0
 + part=$(dialog --backtitle "​ArchLinux Installation"​ --clear --title "​Partition selection: " \
 + --menu "​Choose the partition that you want to use for: boot" 0 0 0 ${p} 2>&1 > /dev/tty )
 + bootfs="​$part"​
 + #Select the format ​
 + partitioning
 + bootdir="​boot"​
 + p=$(echo "​$p"​ | grep -v "​$part"​)
 + ;;
 + "/​home"​)
 + #Select the partition
 + dialog --backtitle "​ArchLinux Installation"​ --title "​Partition Selection"​ --textbox /​tmp/​partitions 0 0
 + part=$(dialog --backtitle "​ArchLinux Installation"​ --clear --title "​Partition selection: " \
 + --menu "​Choose the partition that you want to use for: home" 0 0 0 ${p} 2>&1 > /dev/tty )
 + homefs="​$part"​
 + #Select the format ​
 + partitioning
 + homedir="​home"​
 + p=$(echo "​$p"​ | grep -v "​$part"​)
 + ;;
 + "/​tmp"​)
 + #Select the partition
 + dialog --backtitle "​ArchLinux Installation"​ --title "​Partition Selection"​ --textbox /​tmp/​partitions 0 0
 + part=$(dialog --backtitle "​ArchLinux Installation"​ --clear --title "​Partition selection: " \
 + --menu "​Choose the partition that you want to use for: tmp" 0 0 0 ${p} 2>&1 > /dev/tty )
 + tmpfs="​$part"​
 + #Select the format ​
 + partitioning
 + tmpdir="​tmp"​
 + p=$(echo "​$p"​ | grep -v "​$part"​)
 + ;;
 + "/​usr"​)
 + #Select the partition
 + dialog --backtitle "​ArchLinux Installation"​ --title "​Partition Selection"​ --textbox /​tmp/​partitions 0 0
 + part=$(dialog --backtitle "​ArchLinux Installation"​ --clear --title "​Partition selection: " \
 + --menu "​Choose the partition that you want to use for: usr" 0 0 0 ${p} 2>&1 > /dev/tty )
 + usrfs="​$part"​
 + #Select the format ​
 + partitioning
 + usrdir="​usr"​
 + p=$(echo "​$p"​ | grep -v "​$part"​)
 + ;;
 + "/​var"​)
 + #Select the partition
 + dialog --backtitle "​ArchLinux Installation"​ --title "​Partition Selection"​ --textbox /​tmp/​partitions 0 0
 + part=$(dialog --backtitle "​ArchLinux Installation"​ --clear --title "​Partition selection: " \
 + --menu "​Choose the partition that you want to use for: var" 0 0 0 ${p} 2>&1 > /dev/tty )
 + varfs="​$part"​
 + #Select the format ​
 + partitioning
 + vardir="​var"​
 + p=$(echo "​$p"​ | grep -v "​$part"​)
 + ;;
 + "/​srv"​)
 + #Select the partition
 + dialog --backtitle "​ArchLinux Installation"​ --title "​Partition Selection"​ --textbox /​tmp/​partitions 0 0
 + part=$(dialog --backtitle "​ArchLinux Installation"​ --clear --title "​Partition selection: " \
 + --menu "​Choose the partition that you want to use for: srv" 0 0 0 ${p} 2>&1 > /dev/tty )
 + srvfs="​$part"​
 + #Select the format ​
 + partitioning
 + srvdir="​srv"​
 + p=$(echo "​$p"​ | grep -v "​$part"​)
 + ;;
 + "/​opt"​)
 + #Select the partition
 + dialog --backtitle "​ArchLinux Installation"​ --title "​Partition Selection"​ --textbox /​tmp/​partitions 0 0
 + part=$(dialog --backtitle "​ArchLinux Installation"​ --clear --title "​Partition selection: " \
 + --menu "​Choose the partition that you want to use for: opt" 0 0 0 ${p} 2>&1 > /dev/tty )
 + optfs="​$part"​
 + #Select the format ​
 + partitioning
 + optdir="​opt"​
 + p=$(echo "​$p"​ | grep -v "​$part"​)
 + ;;
 + "​swap"​)
 + dialog --backtitle "​ArchLinux Installation"​ --title "​Partition Selection"​ --textbox /​tmp/​partitions 0 0
 + part=$(dialog --backtitle "​ArchLinux Installation"​ --clear --title "​Partition selection: " \
 + --menu "​Choose the partition that you want to use for: swap" 0 0 0 ${p} 2>&1 > /dev/tty)
 + mkswap "​$part"​
 + swapon "​$part"​
 + swap="​$part"​
 + p=$(echo "​$p"​ | grep -v "​$part"​)
 + esac
 +done
 +
 +##Mounts
 +#First mount the root partition because later we are going to create the folders to mount the partitions there
 +mount "​$rootfs"​ /mnt
 +mkdir -p /​mnt/​{"​$bootdir","​$homedir","​$tmpdir","​$usrdir","​$vardir","​$srvdir","​$optdir"​}
 +mount "​$bootfs"​ /mnt/boot 2> /dev/zero
 +mount "​$homefs"​ /mnt/home 2> /dev/zero
 +mount "​$tmpfs"​ /mnt/tmp 2> /dev/zero
 +mount "​$usrfs"​ /mnt/usr 2> /dev/zero
 +mount "​$varfs"​ /mnt/var 2> /dev/zero
 +mount "​$srvfs"​ /mnt/srv 2> /dev/zero
 +mount "​$optfs"​ /mnt/opt 2> /dev/zero
 +
 +##Install basic system with: The base and the development system (We will want this to compile the majority of packets from AUR), grub, networkmanager and a packet that is useful if we use another OS' grub: os-prober
 +pacstrap /mnt base base-devel grub-bios networkmanager os-prober sudo dialog wget
 +
 +##Generate the fstab file
 +genfstab /mnt > /​mnt/​etc/​fstab
 +
 +###Second phase: Configure the operating system
 +##Languages and keymaps
 +#Select the locale
 +locales="​$(cat /​mnt/​etc/​locale.gen | grep _ | sed '​1,​4d'​ | sed '​s/​\(.\{1\}\)//'​)"​
 +locale=$(dialog --backtitle "​ArchLinux Installation"​ --clear --title "​Locale selection: " \
 + --menu "​Choose your language"​ 0 0 0 ${locales} 2>&1 > /dev/tty)
 +sed -i "/​${locale}/​ s/# *//" /​mnt/​etc/​locale.gen
 +
 +#Select and generate the locale
 +locales="​$(cat /​mnt/​etc/​locale.gen | grep _ | sed '/#/​d'​)"​
 +locale=$(dialog --backtitle "​ArchLinux Installation"​ --clear --title "​Locale selection: " \
 + --menu "​Choose your language"​ 0 0 0 ${locales} 2>&1 > /dev/tty)
 +echo "​LANG=$locale"​ > /​mnt/​etc/​locale.conf
 +arch-chroot /mnt /bin/bash -c "​locale-gen"​
 +
 +#Keyboard type configuration
 +echo "​KEYMAP=$keymap"​ > /​mnt/​etc/​vconsole.conf
 +
 +#Select the timezone
 +selected=0 #Define the variable $selected to 0, this will be used to scape from the while
 +timezonedir=/​usr/​share/​zoneinfo #Define the starting directory
 +while [ "​$selected"​ = "​0"​ ] #While the selection in unselected do...
 +do
 + #This command should output "​Africa",​ it will make an ls to the timezones dir, stored in the variable $timezonedir. This will be used in the case that you were on the main timezone dir.
 + check=$(ls -l $timezonedir | grep -v .tab | awk '/​drwx/'​ | awk -F " " '​{print $9}' | awk '{if (NR!=1) {print}}'​ | head -1)
 + if [[ $check != Africa ]]; then #In the case that you wouldn'​t be in the root of the timezones dir
 + echo "../ UP" >​timezones #Set an option to go up a dir in the menu
 + fi
 + #Get a list of folders in the timezone dir and save it to the temporal file: timezones
 + ls -l $timezonedir | grep -v .tab | awk '/​drwx/'​ | awk -F " " '​{print $9}' | awk '​{print $0"/"​}'​ | awk '​$fs=$fs"​ Time"'​ | awk '{if (NR!=1) {print}}'>>​timezones ​
 + #Get a list of files in the timezone dir and save it to the temporal file: timezones
 + ls -l $timezonedir | grep -v .tab | awk '/​-rw-/'​ | awk -F " " '​{print $9}' | awk '​$fs=$fs"​ Time"'​ | awk '{if (NR!=1) {print}}'>>​timezones
 + timezones=$(cat timezones) #Save all this to a variable called $timezones ​
 + rm timezones #Delete the temporal file
 + timezone=$(dialog --backtitle "​ArchLinux Installation"​ --clear --title "​Timezone selection: " \
 + --menu "​Choose your timezone"​ 0 0 0 ${timezones} 2>&1 >/​dev/​tty) #Generate a menu to select the timezone or the folder that will contain the timezone
 + if [ "​$?"​ = "​0"​ ] #If a selection is made then...
 + then
 + if [[ $timezone == *"/"​* ]]; then #If the timezone contains an slash, that will mean that is a directory
 + timezonedir=$timezonedir/​$timezone #Append the selected folder to the main $timezonedir variable
 + else #If is a file, link it to its location
 + ln -s $timezonedir${timezone} /​mnt/​etc/​timezone
 + selected=1 #Set the seleccin done to exit the while
 + fi
 + fi
 +done
 +
 +#Enter the name of the machine (hostname)
 +hostname=$(dialog --backtitle "​Archlinux Installation"​ --inputbox "Enter the machine'​s name:" 0 0 2>&1 > /dev/tty)
 +echo "​$hostname"​ > /​mnt/​etc/​hostname
 +
 +#Set the root password
 +rootpasswd=$(dialog --backtitle "​Archlinux Installation"​ --title "Root passoword"​ --passwordbox "​Please,​ enter the root password"​ 8 36 2>&1 > /dev/tty)
 +arch-chroot /mnt /bin/sh -c "echo root:​$rootpasswd | chpasswd"​
 +
 +#Add the main user
 +username=$(dialog --backtitle "​Archlinux Installation"​ --title "User creation"​ \
 + --form "​Please,​ enter the user configuration"​ 0 0 0 \
 + "​Username :" 1 1 "​user"​ 1 12 25 30 \
 + "​Real name:" 2 1 "​Nicolas Cage" 2 12 25 30 2>&1 > /dev/tty)
 +user=$(echo "​$username"​ | sed -n 1p)
 +realname=$(echo "​$username"​ | sed -n 2p | sed '​s/​^/"/'​ | sed '​s/​$/"/'​)
 +arch-chroot /mnt /bin/sh -c "​useradd -c $realname -m -g users -G video,​audio,​lp,​optical,​games,​power,​wheel,​storage -s /bin/bash $user" #Add the user to the following groups and it create the home directory
 +userpasswd=$(dialog --backtitle "​Archlinux Installation"​ --title "User creation"​ --passwordbox "​Please,​ enter the user password"​ 8 36 2>&1 > /dev/tty)
 +arch-chroot /mnt /bin/bash -c "echo $user:​$userpasswd | chpasswd"​
 +
 +#Enable the wheel group in the sudoers file
 +sed -i '/​%wheel ALL=(ALL) ALL/​s/​^#//​g'​ /​mnt/​etc/​sudoers
 +
 +#Enable dhcpcd
 +arch-chroot /mnt /bin/bash -c "​systemctl enable dhcpcd"​
 +if [[ ! -z $wifinet ]];then
 + cp /​etc/​netctl/​$wifinet /​mnt/​etc/​netctl/​$wifinet
 + arch-chroot /mnt /bin/bash -c "​netctl enable $wifinet"​
 +fi
 +##Aur helpers
 +#Install Yaourt
 +printf "​\n[archlinuxfr]\nServer = http://​repo.archlinux.fr/​\x24arch\nSigLevel = Optional TrustAll"​ >>/​mnt/​etc/​pacman.conf
 +arch-chroot /mnt /bin/bash -c "​pacman -Syy"
 +arch-chroot /mnt /bin/bash -c "​pacman -S --noconfirm yaourt"​
 +#Update yaourt'​s database
 +arch-chroot /mnt /bin/bash -c "​yaourt -Syy"
 +
 +#Grub instalation question, It will install grub to the previously selected disk stored in the variable $disk 
 +dialog --backtitle "​ArchLinux Installation"​ --title "Grub instalation"​ \
 + --yesno "Do you want to install grub?" 6 32
 +case $? in
 + 0)
 + originaldisk=$disk
 + disks=$(fdisk -l | grep /dev/sd | grep iB | awk -F " " '​{print $2}' | sed '​s/://​g'​)
 + for disk in $disks
 + do
 + echo "$disk Disk" >> temp
 + fdisk -l $disk | grep sd | awk '{if (NR!=1) {print}}'​ | sed '​s/​*//​g'​ | awk -F ' ' '​{print $1,​$5}'​ >> temp
 + done
 + partitions=$(cat temp) && rm temp
 + grubpart=$(dialog --backtitle "​ArchLinux Installation"​ --clear --title "Grub partition/​disk selection: " --menu "​Choose the disk/​partition to install grub in it (The disk that contains base system is $originaldisk):​ " 0 0 0 ${partitions} 2>&1 > /dev/tty)
 + arch-chroot /mnt /bin/bash -c "​grub-install $grubpart && grub-mkconfig -o /​boot/​grub/​grub.cfg";;​
 +esac
 +
 +
 +#Copy the post-insall script to the hard drive
 +cp post-install.sh /mnt/root && chmod +x /​mnt/​root/​post-install.sh
 +sed -i "​s/​selectedkeymap/​${keymap}/​g"​ /​mnt/​root/​post-install.sh
 +
 +#Prepare the system to boot directly to root and run the post-insall script
 +mkdir /​mnt/​etc/​systemd/​system/​getty@tty1.service.d
 +echo -e "​[Service]\nExecStart=\nExecStart=-/​sbin/​agetty --autologin root --noclear %I 38400 linux" > /​mnt/​etc/​systemd/​system/​getty@tty1.service.d/​override.conf
 +echo "sh post-install.sh"​ >> /​mnt/​root/​.bashrc
 +echo -e "if [ -f ~/.bashrc ]; then\n\tsource ~/​.bashrc\nfi"​ >> /​mnt/​root/​.bash_profile
 +
 +#Umount all the partitions
 +umount {$rootfs,​$bootfs,​$homefs,​$tmpfs,​$usrfs,​$varfs,​$srvfs,​$optfs}
 +swapoff $swap 2> /dev/null
 +
 +#Warn the user that the computer is going to reboot
 +dialog --backtitle "​ArchLinux Installation"​ --title "​Attention"​ --msgbox 'The computer is going to reboot to finish the installation'​ 6 62
 +
 +#Reboot the computer
 +reboot
 +</​file>​
 +
 +<file sh post_install.sh>​
 +#!/bin/sh
 +: '​Copyright (C) 2015 Andrés Quiceno Hernández, Mario Gordillo Ortiz
 +
 +This program is free software: you can redistribute it and/or modify
 +it under the terms of the GNU General Public License as published by
 +the Free Software Foundation, either version 3 of the License, or
 +(at your option) any later version.
 +
 +This program is distributed in the hope that it will be useful,
 +but WITHOUT ANY WARRANTY; without even the implied warranty of
 +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ​ See the
 +GNU General Public License for more details.
 +
 +You should have received a copy of the GNU General Public License
 +along with this program. ​ If not, see <​http://​www.gnu.org/​licenses/>'​
 +
 +#Load the X11 keymap
 +localectl --no-convert set-x11-keymap selectedkeymap
 +
 +user=$(cat /etc/passwd | grep 1000 | awk -F':'​ '{ print $1}' | head -1)
 +noConflict="​0"​
 +dialog --backtitle "​ArchLinux Installation"​ --title "​Desktop Environment instalation"​ \
 + --yesno "Do you want to install any desktop environment?"​ 6 51
 +if [[ $? == 0 ]];then
 + until [[ $noConflict == "​1"​ ]];do
 + dialog --backtitle "​ArchLinux Installation"​ --title "Be careful"​ --msgbox 'These are the some incompatibilities between desktops\n
 +       ┌─Gnome \n
 + Unity─┼─Deepin \n
 +       └─Pantheon\n
 + \nKDE4 ── KDE5      ' 0 0
 + cmd=(dialog --backtitle "​ArchLinux Installation"​ --separate-output --checklist "​Select the Desktop Environment:"​ 0 0 0)
 + options=(KDE4 "KDE desktop environment v4"​ off
 + KDE5 "KDE desktop environment v5"​ off
 + Gnome "GNOME Desktop environment"​ off
 + XFCE "XFCE desktop environment"​ off
 + LXDE "Light Desktop environment"​ off
 + MATE "A mantained fork of GNOME v2"​ off
 + Pantheon "​Elementary OS' Desktop environment"​ off
 + LXQT "Light Desktop environment with QT"​ off
 + Unity "​Ubuntu'​s Desktop environment"​ off
 + DDE "​Deepin'​s Desktop environment"​ off
 + OpenBox "​Simple and minimalistic DE"​ off
 + i3 "Tiled Window manager"​ off
 + Cinnamon "Linux Mint's desktop environment"​ off
 + Budgie "​Solus'​ desktop environment"​ off
 + Enlightenment "​Enlightenment desktop environment"​ off
 + bspwm "​Minimalistic tiled window manager"​ off
 + )
 + desktop=$("​${cmd[@]}"​ "​${options[@]}"​ 2>&1 >/​dev/​tty)
 +
 + KDE4true=$(echo "​$desktop"​ | grep "​KDE4"​)
 + KDE5true=$(echo "​$desktop"​ | grep "​KDE5"​)
 + Unitytrue=$(echo "​$desktop"​ | grep "​Unity"​)
 + Gnometrue=$(echo "​$desktop"​ | grep "​Gnome"​)
 + DDEtrue=$(echo "​$desktop"​ | grep "​DDE"​)
 + Pantheontrue=$(echo "​$desktop"​ | grep "​Pantheon"​)
 +
 + if [[ $KDE4true == "​KDE4"​ ]] && [[ $KDE5true == "​KDE5"​ ]]
 + then
 + dialog --backtitle "​ArchLinux Installation"​ --title "​Incompatibility detected"​ --msgbox 'KDE4 and KDE5 are not compatible. Choose only one KDE' 6 57
 + noConflict=0
 + elif [[ $Unitytrue == "​Unity"​ ]] && [[ $Gnometrue == "​Gnome"​ || $DDEtrue == "​DDE"​ || $Pantheontrue == "​Pantheon"​ ]]
 + then
 + dialog --backtitle "​ArchLinux Installation"​ --title "​Incompatibility detected"​ --msgbox 'Unity cannot be installed at the same time that: Gnome, Deepin or Pantheon'​ 6 78
 + noConflict=0
 + else
 + noConflict=1
 + fi
 + done
 + pacman -Syy
 + clear
 + for choice in $desktop #For each line that is on the variable $desktop, grab one line and fit it on the $choice variable
 + do
 + case $choice in #In the case that the $choice variable is..., do... Ex: $choice=KDE5;​ case $choice in. This will select the KDE5 option
 + "​KDE4"​)
 + dialog --backtitle "​ArchLinux Installation"​ --title "KDE4 Instalation"​ \
 + --yesno "Do you want to install KDE4's extra software? (kde-meta)"​ 6 60
 + if [[ $? = 0 ]];then
 + kdemeta=kde-meta
 + fi
 + pacman -S --noconfirm kde $kdemeta
 + #Enable NetworkManager
 + systemctl enable NetworkManager
 + ;;
 +
 + "​KDE5"​)
 + dialog --backtitle "​ArchLinux Installation"​ --title "KDE5 Instalation"​ \
 + --yesno "Do you want to install KDE5's extra software? (plasma-meta)"​ 6 63
 + if [[ $? = 0 ]];then
 + plasmameta=plasma-meta
 + fi
 + pacman -S --noconfirm plasma $plasmameta
 + #Enable NetworkManager
 + systemctl enable NetworkManager
 + ;;
 +
 + "​Gnome"​)
 + dialog --backtitle "​ArchLinux Installation"​ --title "GNOME Instalation"​ \
 + --yesno "Do you want to install GNOME'​s extra software? (gnome-extra)"​ 6 64
 + if [[ $? = 0 ]];then
 + gnomeextra=gnome-extra
 + fi
 + pacman -S --noconfirm gnome $gnomeextra
 + #Enable NetworkManager
 + systemctl enable NetworkManager
 + ;;
 +
 + "​XFCE"​)
 + dialog --backtitle "​ArchLinux Installation"​ --title "XFCE4 Instalation"​ \
 + --yesno "Do you want to install XFCE's extra software? (xfce4-goodies)"​ 6 65
 + if [[ $? = 0 ]];then
 + xfce4goodies=xfce4-goodies
 + fi
 + pacman -S --noconfirm xfce4 $xfce4goodies
 + #Enable NetworkManager
 + systemctl enable NetworkManager
 + ;;
 +
 + "​LXDE"​)
 + dialog --backtitle "​ArchLinux Installation"​ --title "LXDE Instalation"​ \
 + --yesno "Do you want to install LXDE's extra software? (lxde-common)"​ 6 63
 + if [[ $? = 0 ]];then
 + lxdecommon=lxde-common
 + fi
 + pacman -S --noconfirm lxde $lxdecommon
 + #Enable NetworkManager
 + systemctl enable NetworkManager
 + ;;
 +
 + "​MATE"​)
 + dialog --backtitle "​ArchLinux Installation"​ --title "MATE Instalation"​ \
 + --yesno "Do you want to install MATE's extra software? (mate-extra)"​ 6 62
 + if [[ $? = 0 ]];then
 + mateextra=mate-extra
 + fi
 + pacman -S --noconfirm mate $mateextra
 + #Enable NetworkManager
 + systemctl enable NetworkManager
 + ;;
 +
 + "​Pantheon"​)
 + printf "​\n[pantheon]\nServer = http://​pkgbuild.com/​~alucryd/​\x24repo/​\x24arch\nSigLevel = Optional TrustAll\n"​ >> /​etc/​pacman.conf
 + pacman -Syy --noconfirm pantheon-session-bzr audience-bzr contractor-bzr eidete-bzr elementary-icon-theme-bzr elementary-icon-theme-bzr elementary-wallpapers-bzr gtk-theme-elementary-bzr footnote-bzr geary lightdm-pantheon-greeter-bzr maya-calendar-bzr midori-granite-bzr noise-bzr pantheon-backgrounds-bzr pantheon-calculator-bzr pantheon-default-settings-bzr pantheon-files-bzr pantheon-print-bzr pantheon-terminal-bzr plank-theme-pantheon-bzr scratch-text-editor-bzr snap-photobooth-bzr switchboard-bzr ttf-dejavu ttf-droid ttf-freefont ttf-liberation indicator-session indicator-sound
 + sed -i '/​%wheel ALL=(ALL) ALL/​s/​^/#/​g'​ /​etc/​sudoers #Comment the line matching that string
 + sed -i '/​%wheel ALL=(ALL) NOPASSWD: ALL/​s/​^#//​g'​ /​etc/​sudoers #Uncomment the line matching that string
 + sudo -u $user yaourt -A -S --noconfirm ttf-opensans pantheon-notify-bzr
 + sed -i '/​%wheel ALL=(ALL) NOPASSWD: ALL/​s/​^/#/​g'​ /​etc/​sudoers #Comment the line matching that string
 + sed -i '/​%wheel ALL=(ALL) ALL/​s/​^#//​g'​ /​etc/​sudoers #Uncomment the line matching that string
 + #Enable NetworkManager
 + systemctl enable NetworkManager
 + ;;
 +
 + "​LXQT"​)
 + #Reload pacman'​s keys, this resolves an issue related to instalation of lxqt
 + pacman-key --init
 + pacman-key --populate archlinux
 + #​Install LXQt
 + pacman -Syy --noconfirm lxqt oxygen-icons qtcurve
 + sed -i '/​%wheel ALL=(ALL) ALL/​s/​^/#/​g'​ /​etc/​sudoers #Comment the line matching that string
 + sed -i '/​%wheel ALL=(ALL) NOPASSWD: ALL/​s/​^#//​g'​ /​etc/​sudoers #Uncomment the line matching that string
 + sudo -u $user yaourt -A -S --noconfirm qterminal-git obconf-qt-git
 + sed -i '/​%wheel ALL=(ALL) NOPASSWD: ALL/​s/​^/#/​g'​ /​etc/​sudoers #Comment the line matching that string
 + sed -i '/​%wheel ALL=(ALL) ALL/​s/​^#//​g'​ /​etc/​sudoers #Uncomment the line matching that string
 + #Enable NetworkManager
 + systemctl enable NetworkManager
 + wm=$(dialog --backtitle "​ArchLinux Installation"​ --clear --title "​Window Manager Selecion: " \
 + --menu "LXQt requires an Window Manger to work, select it:" 0 0 0 \
 + Openbox "​Simple Window manager"​ \
 + Kwin "KDE Window Manager"​ 2>&1 > /dev/tty)
 + for choice in $wm
 + do
 + case $choice in
 + "​Openbox"​)
 + pacman -S --noconfirm openbox
 + ;;
 +
 + "​Kwin"​)
 + pacman -S --noconfirm kwin
 + ;;
 + esac
 + done
 + ;;
 +
 + "​Unity"​)
 + printf "​\n[Unity-for-Arch]\nServer = http://​dl.dropbox.com/​u/​486665/​Repos/​\x24repo/​\x24arch\nSigLevel = Optional TrustAll\n\n[Unity-for-Arch-Extra]\nServer = http://​dl.dropbox.com/​u/​486665/​Repos/​\x24repo/​\x24arch\nSigLevel = Optional TrustAll\n"​ >> /​etc/​pacman.conf
 + pacman -Syy
 + ubuntu=$(pacman -Slq Unity-for-Arch | grep -v upower-compat | grep -v gsettings-desktop-schemas)
 + ubuntuextra=$(pacman -Slq Unity-for-Arch-Extra | grep -v pidgin-libnotify-ubuntu)
 + pacman -R --noconfirm gsettings-desktop-schemas glib-networking libsoup networkmanager
 + pacman -S --noconfirm ${ubuntu} ${ubuntuextra}
 + pacman -S --noconfirm networkmanager
 + #Enable NetworkManager
 + systemctl enable NetworkManager
 + ;;
 +
 + "​DDE"​)
 + dialog --backtitle "​ArchLinux Installation"​ --title "​Deepin Instalation"​ \
 + --yesno "Do you want to install Deepin'​s extra software? (deepin-extra)"​ 6 66
 + if [[ $? = 0 ]];then
 + deepinextra=deepin-extra
 + fi
 + printf "​\n[home_metakcahura_arch-deepin_Arch_Extra]\nServer = http://​download.opensuse.org/​repositories/​home:/​metakcahura:/​arch-deepin/​Arch_Extra/​\x24arch\nSigLevel = Never\n"​ >> /​etc/​pacman.conf
 + pacman -Syy --noconfirm deepin $deepinextra
 + #Enable NetworkManager
 + systemctl enable NetworkManager
 + ;;
 +
 + "​OpenBox"​)
 + pacman -S --noconfirm openbox
 + #Enable NetworkManager
 + systemctl enable NetworkManager
 + ;;
 +
 + "​i3"​)
 + pacman -S --noconfirm i3-wm i3status i3lock rxvt-unicode
 + #Enable NetworkManager
 + systemctl enable NetworkManager
 + ;;
 +
 + "​Cinnamon"​)
 + pacman -S --noconfirm cinnamon
 + #Enable NetworkManager
 + systemctl enable NetworkManager
 + ;;
 +
 + "​Budgie"​)
 + sed -i '/​%wheel ALL=(ALL) ALL/​s/​^/#/​g'​ /​etc/​sudoers #Comment the line matching that string
 + sed -i '/​%wheel ALL=(ALL) NOPASSWD: ALL/​s/​^#//​g'​ /​etc/​sudoers #Uncomment the line matching that string
 + sudo -u $user yaourt -A -S --noconfirm budgie-desktop-git
 + sed -i '/​%wheel ALL=(ALL) NOPASSWD: ALL/​s/​^/#/​g'​ /​etc/​sudoers #Comment the line matching that string
 + sed -i '/​%wheel ALL=(ALL) ALL/​s/​^#//​g'​ /​etc/​sudoers #Uncomment the line matching that string
 + #Enable NetworkManager
 + systemctl enable NetworkManager
 + ;;
 +
 + "​Enlightenment"​)
 + pacman -S --noconfirm enlightenment
 + #Enable NetworkManager
 + systemctl enable NetworkManager
 + ;;
 +
 + "​bspwm"​)
 + pacman -S --noconfirm bspwm sxhkd rxvt-unicode
 + mkdir -p /​home/​$user/​.config/​bspwm
 + mkdir -p /​home/​$user/​.config/​sxhkd
 + cp /​usr/​share/​doc/​bspwm/​examples/​bspwmrc /​home/​$user/​.config/​bspwm/​bspwmrc
 + echo "sxhkd &" >> /​home/​$user/​.config/​bspwm/​bspwmrc
 + chmod +x /​home/​$user/​.config/​bspwm/​bspwmrc
 + chown -R $user:users /​home/​$user/​.config/​bspwm
 + cp /​usr/​share/​doc/​bspwm/​examples/​sxhkdrc /​home/​$user/​.config/​sxhkd/​sxhkdrc
 + chmod +x /​home/​$user/​.config/​sxhkd/​sxhkdrc
 + chown -R $user:users /​home/​$user/​.config/​sxhkd
 + ;;
 + esac
 + done
 +
 + until [[ $noDmConflict == "​1"​ ]];do
 + dm=$(dialog --backtitle "​ArchLinux Installation"​ --clear --title "​Display Manager selection: " \
 + --menu "​Select the Display Manager:"​ 0 0 0 \
 + GDM "GNOME Display manager"​ \
 + SDDM "KDE4 Display manager"​ \
 + LXDM "LXDE Display manager"​ \
 + MDM "Linux Mint's Display manager"​ \
 + Entrance "​Enlightenment'​s Display manager (Experimental)"​ \
 + LightDM "​Cross-desktop display manager"​ 2>&1 > /dev/tty)
 +
 + GDMtrue=$(echo "​$dm"​ | grep "​GDM"​)
 + if [[ $Unitytrue == "​Unity"​ ]] && [[ $GDMtrue == "​GDM"​ ]]
 + then
 + dialog --backtitle "​ArchLinux Installation"​ --title "​Incompatibility detected"​ --msgbox 'Unity and GDM are not compatible. Please, choose other desktop manager than GDM' 6 83
 + noDmConflict=0
 + else
 + noDmConflict=1
 + fi
 + done
 + for choice in $dm
 + do
 + case $choice in
 + "​GDM"​)
 + pacman -S --noconfirm gdm
 + systemctl enable gdm
 + ;;
 +
 + "​SDDM"​)
 + pacman -S --noconfirm sddm
 + systemctl enable sddm
 + ;;
 +
 + "​LXDM"​)
 + pacman -S --noconfirm lxdm
 + systemctl enable lxdm
 + ;;
 +
 + "​MDM"​)
 + sed -i '/​%wheel ALL=(ALL) ALL/​s/​^/#/​g'​ /​etc/​sudoers #Comment the line matching that string
 + sed -i '/​%wheel ALL=(ALL) NOPASSWD: ALL/​s/​^#//​g'​ /​etc/​sudoers #Uncomment the line matching that string
 + sudo -u $user yaourt -A -S --noconfirm mdm-display-manager
 + sed -i '/​%wheel ALL=(ALL) NOPASSWD: ALL/​s/​^/#/​g'​ /​etc/​sudoers #Comment the line matching that string
 + sed -i '/​%wheel ALL=(ALL) ALL/​s/​^#//​g'​ /​etc/​sudoers #Uncomment the line matching that string
 + systemctl enable mdm
 + ;;
 +
 + "​Entrance"​)
 + sed -i '/​%wheel ALL=(ALL) ALL/​s/​^/#/​g'​ /​etc/​sudoers #Comment the line matching that string
 + sed -i '/​%wheel ALL=(ALL) NOPASSWD: ALL/​s/​^#//​g'​ /​etc/​sudoers #Uncomment the line matching that string
 + sudo -u $user yaourt -A -S --noconfirm entrance-git
 + sed -i '/​%wheel ALL=(ALL) NOPASSWD: ALL/​s/​^/#/​g'​ /​etc/​sudoers #Comment the line matching that string
 + sed -i '/​%wheel ALL=(ALL) ALL/​s/​^#//​g'​ /​etc/​sudoers #Uncomment the line matching that string
 + systemctl enable entrance
 + ;;
 +
 + "​LightDM"​)
 + pacman -S --noconfirm lightdm
 + systemctl enable lightdm
 + ;;
 + esac
 + done
 +fi
 +sh=$(dialog --backtitle "​ArchLinux Installation"​ --clear --title "​Default Shell selection: " \
 + --menu "​Select the Default Shell:"​ 0 0 0 \
 + BASH "​Default Shell" \
 + SH "SH Shell" \
 + ZSH "ZSH Shell" \
 + FISH "FISH Shell" \
 + CShell "C Shell" \
 + DASH "DASH Shell" 2>&1 > /dev/tty)
 +for choice in $sh
 +do
 + case $choice in
 + "​BASH"​)
 + usermod -s /bin/bash root
 + usermod -s /bin/bash $user
 + ;;
 +
 + "​SH"​)
 + usermod -s /bin/sh root
 + usermod -s /bin/sh $user
 + ;;
 +
 + "​ZSH"​)
 + pacman -S --noconfirm zsh
 + zsh=$(dialog --backtitle "​ArchLinux Installation"​ --clear --title "ZSH selection: " \
 + --menu "​Select the ZSH theme:"​ 0 0 0 \
 + grml "grml zsh config"​ \
 + oh-my-zsh "oh my zsh" \
 + None "Pure ZSH!" 2>&1 > /dev/tty)
 + for choice in $zsh
 + do
 + case $choice in
 + "​grml"​)
 + pacman -S --noconfirm grml-zsh-config
 + ;;
 +
 + "​oh-my-zsh"​)
 + sed -i '/​%wheel ALL=(ALL) ALL/​s/​^/#/​g'​ /​etc/​sudoers #Comment the line matching that string
 + sed -i '/​%wheel ALL=(ALL) NOPASSWD: ALL/​s/​^#//​g'​ /​etc/​sudoers #Uncomment the line matching that string
 + sudo -u $user yaourt -S -A --noconfirm oh-my-zsh-git bullet-train-oh-my-zsh-theme-git oh-my-zsh-powerline-theme-git powerline-fonts-git
 + sed -i '/​%wheel ALL=(ALL) NOPASSWD: ALL/​s/​^/#/​g'​ /​etc/​sudoers #Comment the line matching that string
 + sed -i '/​%wheel ALL=(ALL) ALL/​s/​^#//​g'​ /​etc/​sudoers #Uncomment the line matching that string
 + cp /​usr/​share/​oh-my-zsh/​zshrc /​home/​$user/​.zshrc
 + cp /​usr/​share/​oh-my-zsh/​zshrc /​root/​.zshrc
 + themes=$(ls /​usr/​share/​oh-my-zsh/​themes | awk -F "​."​ '​{print $1}' | sed -e 's/$/ theme/'​)
 + theme=$(dialog --backtitle "​ArchLinux Installation"​ --clear --title "Oh my ZSH theme selection: " \
 + --menu "​Select the Oh my ZSH theme:"​ 0 0 0 ${themes} 2>&1 > /dev/tty)
 + sed -i "​s/​ZSH_THEME=\x22robbyrussell\x22/​ZSH_THEME=\x22$theme\x22/"​ /​home/​$user/​.zshrc
 + sed -i "​s/​ZSH_THEME=\x22robbyrussell\x22/​ZSH_THEME=\x22$theme\x22/"​ /​root/​.zshrc
 + ;;
 +
 + "​None"​)
 + echo "Pure ZSH!"
 + ;;
 + esac
 + done
 +
 + usermod -s /bin/zsh root
 + usermod -s /bin/zsh $user
 + ;;
 +
 + "​FISH"​)
 + pacman -S --noconfirm fish
 + usermod -s /​usr/​bin/​fish root
 + usermod -s /​usr/​bin/​fish $user
 + ;;
 +
 + "​CShell"​)
 + pacman -S --noconfirm tcsh
 + usermod -s /bin/tcsh root
 + usermod -s /bin/tcsh $user
 + ;;
 +
 + "​DASH"​)
 + pacman -S --noconfirm dash
 + usermod -s /bin/dash root
 + usermod -s /bin/dash $user
 + ;;
 + esac
 +done
 +
 +#Install the compatibility layer for virtualbox or the graphics card driver
 +dialog --backtitle "​ArchLinux Installation"​ --title "​Graphics Drivers installation"​ \
 + --yesno "Are you on a VirtualBox machine?"​ 6 36
 +response=$?
 +case $response in
 + 0) pacman -S --noconfirm ​ virtualbox-guest-utils virtualbox-guest-modules
 + modprobe -a vboxguest vboxsf vboxvideo
 + systemctl enable vboxservice && systemctl start vboxservice;;​
 + 1) graphics=$(lspci -k | grep -A 2 -E "​(VGA|3D)"​)
 + if [[ $graphics ​ = *Intel* || $graphics = *intel* || $graphics = *INTEL* ]]
 + then
 +         pacman -S --noconfirm xf86-video-intel mesa-libgl
 + fi
 + if [[ $graphics = *NVIDIA* || $graphics = *nvidia* || $graphics = *Nvidia* ]]
 + then
 +         pacman -S --noconfirm nvidia
 + fi
 + if [[ $graphics ​ = *ATI* || $graphics = *ati* || $graphics = *Ati* || $graphics = *AMD* || $graphics = *amd* || $graphics = *amd* ]]
 + then
 +         pacman -S --noconfirm xf86-video-ati mesa-libgl mesa-vdpau lib32-mesa-vdpau
 + fi
 +;;
 +esac
 +LAMP=0
 +
 +dialog --backtitle "​ArchLinux Installation"​ --title "​Services instalation"​ \
 + --yesno "Do you want to install any service? Ex: SSH" 6 47
 +if [[ $? == 0 ]];then
 + noConflict=0
 + until [[ $noConflict == "​1"​ ]];do
 + dialog --backtitle "​ArchLinux Installation"​ --title "Be careful"​ --msgbox 'These are the some incompatibilities between servers\n
 +         Subsonic ── Madsonic'​ 0 0
 +
 + cmd=(dialog --backtitle "​ArchLinux Installation"​ --separate-output --checklist "​Select the Services that you want to install:"​ 0 0 0)
 + options=(SSH "​Remote console"​ off
 + Web "​Apache + PHP5 + MariaDB(Mysql) A complete Web Server"​ off
 + Owncloud "​Self-hosted cloud"​ off
 + Wordpress "​Self-hosted blog"​ off
 + Subsonic "Music Server"​ off
 + Madsonic "Music Server"​ off
 + GitLab "Git Code server"​ off
 + Gogs "​Simple Git code server"​ off
 + NTOP "​Traffic monitoring tool"​ off
 + TightVNC "​Remote screen server"​ off
 + Deluge "​Torrent server with web UI"​ off
 + L2TP "​VirtualPrivateNetwork Server L2TP, IPSEC"​ off
 + )
 + desktop=$("​${cmd[@]}"​ "​${options[@]}"​ 2>&1 >/​dev/​tty)
 +
 + Subtrue=$(echo "​$desktop"​ | grep "​Subsonic"​)
 + Madtrue=$(echo "​$desktop"​ | grep "​Madsonic"​)
 +
 + if [[ $Subtrue == "​Subsonic"​ ]] && [[ $Madtrue == "​Madsonic"​ ]]
 + then
 + dialog --backtitle "​ArchLinux Installation"​ --title "​Incompatibility detected"​ --msgbox '​Subsonic and Madsonic are not compatible. Choose only one' 6 61
 + noConflict=0
 + else
 + noConflict=1
 + fi
 + done
 +
 + pacman -Syy
 + clear
 + for choice in $desktop
 + do
 + case $choice in
 + "​SSH"​)
 + port=22
 + ip=$(ip a | grep inet | grep -v inet6 | grep -v host | awk -F " " '​{print $2}' | awk -F "/"​ '​{print $1}')
 + pacman -S --noconfirm openssh
 + dialog --backtitle "​ArchLinux Installation"​ --title "SSH Configuration"​ \
 + --yesno "Do you want to change the default port(22) of SSHD?" 7 60 
 + response=$?​
 + case $response in
 + 0) ​ port=$(dialog --backtitle "​Archlinux Installation"​ --title "SSH Configuration"​ \
 + --inputbox "Enter the port that you want to use:" 8 40 2>&1 > /dev/tty)
 + if [ "​$?"​ = "​0"​ ]
 + then
 + sed -i -e "​s/#​Port 22/Port $(echo $port)/​g"​ /​etc/​ssh/​sshd_config
 + fi;;
 + 1) ​ echo "Port not changed";;​
 + esac
 + systemctl start sshd
 + systemctl enable sshd
 + dialog --backtitle "​ArchLinux Installation"​ --title "SSH Installation"​ \
 + --msgbox "SSH Instalation is now completed. You can use this settings to connect to the server:​\nIP:​ $ip \nPort: $port" 0 0
 + ;;
 +
 + "​Web"​)
 + ip=$(ip a | grep inet | grep -v inet6 | grep -v host | awk -F " " '​{print $2}' | awk -F "/"​ '​{print $1}')
 + pacman -S --noconfirm apache php php-apache mariadb
 + ##​MariaDB
 + mysql_install_db --user=mysql --basedir=/​usr --datadir=/​var/​lib/​mysql
 + systemctl start mysqld
 + systemctl enable mysqld
 +
 + #Ask for the password of the root's database username
 + rpassword=$(dialog --backtitle "​Archlinux Installation"​ --passwordbox "Enter the root's password for MySQL/​MariaDB:"​ 8 40 2>&1 > /dev/tty)
 + if [ "​$?"​ = "​0"​ ]
 + then
 + /​usr/​bin/​mysqladmin -u root password $rpassword
 + fi
 +
 + #Add the main user of mysql
 + db=$(dialog --backtitle "​Archlinux Installation"​ --title "Mysql user creation"​ \
 + --form "​\nPlease,​ enter the mysql user configuration"​ 25 60 16 \
 + "​Username :" 1 1 "​user"​ 1 25 25 30 \
 + "​Password :" 2 1 "​passw0rd"​ 2 25 25 30 2>&1 > /dev/tty)
 + dbuser=$(echo "​$db"​ | sed -n 1p)
 + dbpass=$(echo "​$db"​ | sed -n 2p)
 + if [ "​$?"​ = "​0"​ ]
 + then
 + DB1="​CREATE USER '​$dbuser'​@'​localhost'​ IDENTIFIED BY '​$dbpass';"​
 + DB2="​ GRANT ALL PRIVILEGES ON *.* TO '​$dbuser'​@'​localhost'​ WITH GRANT OPTION;"​
 + DB="​${DB1}${DB2}"​
 + mysql -uroot -p$rpassword -e "​$DB"​
 + userdb="​\n\nMySQL User\nUser: $dbuser\nPassword:​ $dbpass"​
 + fi
 + dialog --backtitle "​ArchLinux Installation"​ --title "MySQL Installation"​ \
 + --msgbox "MySQL Instalation is now completed. You can use this settings to connect to the server:​\n\nUsername:​ root \nPassword: $rpassword$userdb"​ 0 0
 +
 + ##​Apache+PHP5
 + sed -i '​s/​LoadModule mpm_event_module modules\x2Fmod_mpm_event.so/​LoadModule mpm_prefork_module modules\x2Fmod_mpm_prefork.so/​g'​ /​etc/​httpd/​conf/​httpd.conf #Replace the first string with the second one
 + sed -i '/​LoadModule dir_module modules\x2Fmod_dir.so/​a LoadModule php5_module modules\x2Flibphp5.so'​ /​etc/​httpd/​conf/​httpd.conf #Append the second string after the first one
 + sed -i '/​Include conf\x2Fextra\x2Fhttpd-default.conf/​a \\n\x23PHP5\nInclude conf\x2Fextra\x2Fphp5_module.conf'​ /​etc/​httpd/​conf/​httpd.conf #Append the second string after the first one
 + systemctl enable httpd
 + systemctl start httpd
 + LAMP=1
 + dialog --backtitle "​ArchLinux Installation"​ --title "​Apache Installation"​ \
 + --msgbox "​Apache Instalation is now completed. You can use this settings to connect to the server:​\nIP:​ $ip" 0 0
 + ;;
 +
 + "​Owncloud"​)
 + if [[ $LAMP == "​0"​ ]]; then
 + ip=$(ip a | grep inet | grep -v inet6 | grep -v host | awk -F " " '​{print $2}' | awk -F "/"​ '​{print $1}')
 + pacman -S --noconfirm apache php php-apache mariadb
 + ##​MariaDB
 + mysql_install_db --user=mysql --basedir=/​usr --datadir=/​var/​lib/​mysql
 + systemctl start mysqld
 + systemctl enable mysqld
 +
 + #Ask for the password of the root's database username
 + rpassword=$(dialog --backtitle "​Archlinux Installation"​ --passwordbox "Enter the root's password for MySQL/​MariaDB:"​ 8 40 2>&1 > /dev/tty)
 + if [ "​$?"​ = "​0"​ ]
 + then
 + /​usr/​bin/​mysqladmin -u root password $rpassword
 + fi
 +
 + #Add the main user of mysql
 + db=$(dialog --backtitle "​Archlinux Installation"​ --title "Mysql user creation"​ \
 + --form "​\nPlease,​ enter the mysql user configuration"​ 25 60 16 \
 + "​Username :" 1 1 "​user"​ 1 25 25 30 \
 + "​Password :" 2 1 "​passw0rd"​ 2 25 25 30 2>&1 > /dev/tty)
 + dbuser=$(echo "​$db"​ | sed -n 1p)
 + dbpass=$(echo "​$db"​ | sed -n 2p)
 + if [ "​$?"​ = "​0"​ ]
 + then
 + DB1="​CREATE USER '​$dbuser'​@'​localhost'​ IDENTIFIED BY '​$dbpass';"​
 + DB2="​ GRANT ALL PRIVILEGES ON *.* TO '​$dbuser'​@'​localhost'​ WITH GRANT OPTION;"​
 + DB="​${DB1}${DB2}"​
 + mysql -uroot -p$rpassword -e "​$DB"​
 + userdb="​\n\nMySQL User\nUser: $dbuser\nPassword:​ $dbpass"​
 + fi
 + dialog --backtitle "​ArchLinux Installation"​ --title "MySQL Installation"​ \
 + --msgbox "MySQL Instalation is now completed. You can use this settings to connect to the server:​\n\nUsername:​ root \nPassword: $rpassword$userdb"​ 0 0
 +
 + ##​Apache+PHP5
 + sed -i '​s/​LoadModule mpm_event_module modules\x2Fmod_mpm_event.so/​LoadModule mpm_prefork_module modules\x2Fmod_mpm_prefork.so/​g'​ /​etc/​httpd/​conf/​httpd.conf #Replace the first string with the second one
 + sed -i '/​LoadModule dir_module modules\x2Fmod_dir.so/​a LoadModule php5_module modules\x2Flibphp5.so'​ /​etc/​httpd/​conf/​httpd.conf #Append the second string after the first one
 + sed -i '/​Include conf\x2Fextra\x2Fhttpd-default.conf/​a \\n\x23PHP5\nInclude conf\x2Fextra\x2Fphp5_module.conf'​ /​etc/​httpd/​conf/​httpd.conf #Append the second string after the first one
 + systemctl enable httpd
 + systemctl start httpd
 + LAMP=1
 + dialog --backtitle "​ArchLinux Installation"​ --title "​Apache Installation"​ \
 + --msgbox "​Apache Instalation is now completed. You can use this settings to connect to the server:​\nIP:​ $ip" 0 0
 + fi
 + pacman -S --noconfirm owncloud php-intl php-mcrypt
 + sed -i '/​extension=gd.so/​s/​^;//​g'​ /​etc/​php/​php.ini #Uncomment the line matching that string
 + sed -i '/​extension=iconv.so/​s/​^;//​g'​ /​etc/​php/​php.ini #Uncomment the line matching that string
 + sed -i '/​extension=xmlrpc.so/​s/​^;//​g'​ /​etc/​php/​php.ini #Uncomment the line matching that string
 + sed -i '/​extension=zip.so/​s/​^;//​g'​ /​etc/​php/​php.ini #Uncomment the line matching that string
 + sed -i '/​extension=bz2.so/​s/​^;//​g'​ /​etc/​php/​php.ini #Uncomment the line matching that string
 + sed -i '/​extension=curl.so/​s/​^;//​g'​ /​etc/​php/​php.ini #Uncomment the line matching that string
 + sed -i '/​extension=intl.so/​s/​^;//​g'​ /​etc/​php/​php.ini #Uncomment the line matching that string
 + sed -i '/​extension=mcrypt.so/​s/​^;//​g'​ /​etc/​php/​php.ini #Uncomment the line matching that string
 + sed -i '/​extension=openssl.so/​s/​^;//​g'​ /​etc/​php/​php.ini #Uncomment the line matching that string
 + sed -i '/​extension=pdo_mysql.so/​s/​^;//​g'​ /​etc/​php/​php.ini #Uncomment the line matching that string
 + sed -i '/​extension=mysql.so/​s/​^;//​g'​ /​etc/​php/​php.ini #Uncomment the line matching that string
 + cp /​etc/​webapps/​owncloud/​apache.example.conf /​etc/​httpd/​conf/​extra/​owncloud.conf
 + echo -e "​Include conf/​extra/​owncloud.conf"​ >> /​etc/​httpd/​conf/​httpd.conf
 + owncloudname=wordpress
 + dialog --backtitle "​ArchLinux Installation"​ --title "​Owncloud Instalation"​ --yesno "Do you want to change the default address for owncloud?​\n(Default http://​domain.com/​owncloud/​)"​ 8 45
 + if [[ $? == "​0"​ ]];then
 + owncloudname=$(dialog --backtitle "​ArchLinux Installation"​ --title "​Owncloud Instalation"​ --inputbox "Enter the address that you want to use:\n(Ej: acloud = http://​domain.com/​acloud)"​ 9 50 2>&1 > /dev/tty)
 + sed -i "​s/​Alias \x2Fowncloud/​Alias \x2F$owncloudname/​g"​ /​etc/​httpd/​conf/​extra/​owncloud.conf
 + fi
 + dialog --backtitle "​ArchLinux Installation"​ --title "​Owncloud Instalation"​ --yesno "Do you want to change the default port for owncloud?​\n(Default:​ 80)" 8 45
 + if [[ $? == "​0"​ ]];then
 + owncloudport=$(dialog --backtitle "​ArchLinux Installation"​ --title "​Owncloud Instalation"​ --inputbox "Enter the port that you want to use: (Ej: 5297 = http://​domain.com:​5297)"​ 8 40 2>&1 > /dev/tty)
 + sed -i "​s/​*:​80/​*:​$owncloudport/​g"​ /​etc/​httpd/​conf/​extra/​owncloud.conf
 + sed -i "​s/​Listen 80/Listen 80\nListen $owncloudport/​g"​ /​etc/​httpd/​conf/​httpd.conf
 +
 + definedport=1
 + fi
 + chown http:http -R /​usr/​share/​webapps/​owncloud/​
 + #Enter the database'​s password
 + ownpass=$(dialog --backtitle "​Archlinux Installation"​ --passwordbox "Enter owncloud'​s database password:"​ 8 40 2>&1 > /dev/tty)
 + DB1="​CREATE USER '​owncloud'​@'​localhost'​ IDENTIFIED BY '​$ownpass';"​
 + DB2="​ CREATE DATABASE owncloud;"​
 + DB3="​ GRANT ALL PRIVILEGES ON owncloud.* TO '​owncloud'​@'​localhost'​ WITH GRANT OPTION;"​
 + DB="​${DB1}${DB2}${DB3}"​
 + mysql -uroot -p$rpassword -e "​$DB"​
 + if [[ defined == "​1"​ ]];then
 + definedport="​\nOr you can acces through $ip:​$owncloudport"​
 + fi
 + systemctl restart httpd
 + dialog --backtitle "​ArchLinux Installation"​ --title "​Owncloud Installation"​ \
 + --msgbox "​Owncloud Instalation is now completed. You can use this settings to connect to the server:​\nAddress:​ $ip/​$owncloudname$definedport"​ 0 0
 + ;;
 +
 + "​Wordpress"​)
 + if [[ $LAMP == "​0"​ ]]; then
 + ip=$(ip a | grep inet | grep -v inet6 | grep -v host | awk -F " " '​{print $2}' | awk -F "/"​ '​{print $1}')
 + pacman -S --noconfirm apache php php-apache mariadb
 + ##​MariaDB
 + mysql_install_db --user=mysql --basedir=/​usr --datadir=/​var/​lib/​mysql
 + systemctl start mysqld
 + systemctl enable mysqld
 +
 + #Ask for the password of the root's database username
 + rpassword=$(dialog --backtitle "​Archlinux Installation"​ --passwordbox "Enter the root's password for MySQL/​MariaDB:"​ 8 40 2>&1 > /dev/tty)
 + if [ "​$?"​ = "​0"​ ]
 + then
 + /​usr/​bin/​mysqladmin -u root password $rpassword
 + fi
 +
 + #Add the main user of mysql
 + db=$(dialog --backtitle "​Archlinux Installation"​ --title "Mysql user creation"​ \
 + --form "​\nPlease,​ enter the mysql user configuration"​ 25 60 16 \
 + "​Username :" 1 1 "​user"​ 1 25 25 30 \
 + "​Password :" 2 1 "​passw0rd"​ 2 25 25 30 2>&1 > /dev/tty)
 + dbuser=$(echo "​$db"​ | sed -n 1p)
 + dbpass=$(echo "​$db"​ | sed -n 2p)
 + if [ "​$?"​ = "​0"​ ]
 + then
 + DB1="​CREATE USER '​$dbuser'​@'​localhost'​ IDENTIFIED BY '​$dbpass';"​
 + DB2="​ GRANT ALL PRIVILEGES ON *.* TO '​$dbuser'​@'​localhost'​ WITH GRANT OPTION;"​
 + DB="​${DB1}${DB2}"​
 + mysql -uroot -p$rpassword -e "​$DB"​
 + userdb="​\n\nMySQL User\nUser: $dbuser\nPassword:​ $dbpass"​
 + fi
 + dialog --backtitle "​ArchLinux Installation"​ --title "MySQL Installation"​ \
 + --msgbox "MySQL Instalation is now completed. You can use this settings to connect to the server:​\n\nUsername:​ root \nPassword: $rpassword$userdb"​ 0 0
 +
 + ##​Apache+PHP5
 + sed -i '​s/​LoadModule mpm_event_module modules\x2Fmod_mpm_event.so/​LoadModule mpm_prefork_module modules\x2Fmod_mpm_prefork.so/​g'​ /​etc/​httpd/​conf/​httpd.conf #Replace the first string with the second one
 + sed -i '/​LoadModule dir_module modules\x2Fmod_dir.so/​a LoadModule php5_module modules\x2Flibphp5.so'​ /​etc/​httpd/​conf/​httpd.conf #Append the second string after the first one
 + sed -i '/​Include conf\x2Fextra\x2Fhttpd-default.conf/​a \\n\x23PHP5\nInclude conf\x2Fextra\x2Fphp5_module.conf'​ /​etc/​httpd/​conf/​httpd.conf #Append the second string after the first one
 + systemctl enable httpd
 + systemctl start httpd
 + LAMP=1
 + dialog --backtitle "​ArchLinux Installation"​ --title "​Apache Installation"​ \
 + --msgbox "​Apache Instalation is now completed. You can use this settings to connect to the server:​\nIP:​ $ip" 0 0
 + fi
 + pacman -S --noconfirm wordpress
 + sed -i '/​extension=ftp.so/​s/​^;//​g'​ /​etc/​php/​php.ini #Uncomment the line matching that string
 + sed -i '/​extension=curl.so/​s/​^;//​g'​ /​etc/​php/​php.ini #Uncomment the line matching that string
 + sed -i '/​extension=gd.so/​s/​^;//​g'​ /​etc/​php/​php.ini #Uncomment the line matching that string
 + sed -i '/​extension=iconv.so/​s/​^;//​g'​ /​etc/​php/​php.ini #Uncomment the line matching that string
 + sed -i '/​extension=pdo_mysql.so/​s/​^;//​g'​ /​etc/​php/​php.ini #Uncomment the line matching that string
 + sed -i '/​extension=mysql.so/​s/​^;//​g'​ /​etc/​php/​php.ini #Uncomment the line matching that string
 + sed -i '/​extension=openssl.so/​s/​^;//​g'​ /​etc/​php/​php.ini #Uncomment the line matching that string
 + sed -i '/​extension=sockets.so/​s/​^;//​g'​ /​etc/​php/​php.ini #Uncomment the line matching that string
 + sed -i '/​extension=xmlrpc.so/​s/​^;//​g'​ /​etc/​php/​php.ini #Uncomment the line matching that string
 + sed -i '/​extension=pspell.so/​s/​^;//​g'​ /​etc/​php/​php.ini #Uncomment the line matching that string
 + printf "Alias /wordpress \x22/​usr/​share/​webapps/​wordpress\x22\n<​Directory \x22/​usr/​share/​webapps/​wordpress\x22>​\n\tAllowOverride All\n\tOptions FollowSymlinks\n\tRequire all granted\n\tphp_admin_value open_basedir \x22/​srv/:/​tmp/:/​usr/​share/​webapps/:/​etc/​webapps:​\x24\x22\n</​Directory>"​ > /​etc/​httpd/​conf/​extra/​httpd-wordpress.conf
 + wordpressname=wordpress
 + echo -e "​\nInclude conf/​extra/​httpd-wordpress.conf\n"​ >> /​etc/​httpd/​conf/​httpd.conf
 + dialog --backtitle "​ArchLinux Installation"​ --title "​Wordpress Instalation"​ --yesno "Do you want to change the default address for Wordpress?​\n(Default http://​domain.com/​wordpress/​)"​ 8 45
 + if [[ $? == "​0"​ ]];then
 + wordpressname=$(dialog --backtitle "​ArchLinux Installation"​ --title "​Wordpress Instalation"​ --inputbox "Enter the address that you want to use\n(Ej: myblog = http://​domain.com/​myblog)"​ 9 50 2>&1 > /dev/tty)
 + sed -i "​s/​Alias \x2Fwordpress/​Alias \x2F$wordpressname/​g"​ /​etc/​httpd/​conf/​extra/​httpd-wordpress.conf
 + fi
 + chown http:http -R /​usr/​share/​webapps/​wordpress/​
 + #Enter the database'​s password
 + wordpass=$(dialog --backtitle "​Archlinux Installation"​ --passwordbox "Enter WordPress'​ database password:"​ 8 40 2>&1 > /dev/tty)
 + DB1="​CREATE USER '​wordpress'​@'​localhost'​ IDENTIFIED BY '​$wordpass';"​
 + DB2="​ CREATE DATABASE wordpress;"​
 + DB3="​ GRANT ALL PRIVILEGES ON wordpress.* TO '​wordpress'​@'​localhost'​ WITH GRANT OPTION;"​
 + DB="​${DB1}${DB2}${DB3}"​
 + mysql -uroot -p$rpassword -e "​$DB"​
 + systemctl restart httpd
 + dialog --backtitle "​ArchLinux Installation"​ --title "​Wordpress Installation"​ \
 + --msgbox "​Wordpress Instalation is now completed. You can use this settings to connect to the server:​\nIP:​ $ip/​$wordpressname"​ 0 0
 + ;;
 +
 + "​Subsonic"​)
 + pacman -S --noconfirm ffmpeg flac lame
 + sed -i '/​%wheel ALL=(ALL) ALL/​s/​^/#/​g'​ /​etc/​sudoers #Comment the line matching that string
 + sed -i '/​%wheel ALL=(ALL) NOPASSWD: ALL/​s/​^#//​g'​ /​etc/​sudoers #Uncomment the line matching that string
 + sudo -u $user yaourt -S -A --noconfirm subsonic
 + sed -i '/​%wheel ALL=(ALL) NOPASSWD: ALL/​s/​^/#/​g'​ /​etc/​sudoers #Comment the line matching that string
 + sed -i '/​%wheel ALL=(ALL) ALL/​s/​^#//​g'​ /​etc/​sudoers #Uncomment the line matching that string
 + useradd --system subsonic
 + gpasswd --add subsonic audio
 + cd /​var/​lib/​subsonic
 + chown -R subsonic:​subsonic .
 + test -d transcode || mkdir transcode
 + chown -R root:root transcode
 + mkdir /​var/​lib/​subsonic/​transcode
 + cd /​var/​lib/​subsonic/​transcode
 + ln -s "​$(which ffmpeg)"​
 + ln -s "​$(which flac)"
 + ln -s "​$(which lame)"
 +
 + dialog --backtitle "​ArchLinux Installation"​ --title "​Subsonic Configuration"​ \
 + --yesno "Do you want to change the default HTTP port(4040) of Subsonic?"​ 7 60
 + response=$?​
 + case $response in
 + 0) ​ port=$(dialog --backtitle "​Archlinux Installation"​ --title "​Subsonic Configuration"​ \
 + --inputbox "Enter the port that you want to use:" 8 40 2>&1 > /dev/tty)
 + if [ "​$?"​ = "​0"​ ]
 + then
 + sed -i "​s/​SUBSONIC_PORT=4040/​SUBSONIC_PORT=$port/​g"​ /​var/​lib/​subsonic/​subsonic.sh
 + fi;;
 + 1) echo "HTTP port not changed";;​
 + esac
 +
 + dialog --backtitle "​ArchLinux Installation"​ --title "​Subsonic Configuration"​ \
 + --yesno "Do you want to add a HTTPS port to Subsonic?"​ 7 60
 + response=$?​
 + case $response in
 + 0) ​ port=$(dialog --backtitle "​Archlinux Installation"​ --title "​Subsonic Configuration"​ \
 + --inputbox "Enter the port that you want to use:" 8 40 2>&1 > /dev/tty)
 + if [ "​$?"​ = "​0"​ ]
 + then
 + sed -i "​s/​SUBSONIC_HTTPS_PORT=0/​SUBSONIC_HTTPS_PORT=$port/​g"​ /​var/​lib/​subsonic/​subsonic.sh
 + fi;;
 + 1) echo "HTTPS port not configured";;​
 + esac
 + systemctl enable subsonic
 + systemctl start subsonic
 + dialog --backtitle "​ArchLinux Installation"​ --title "​Subsonic Installation"​ \
 + --msgbox "​Subsonic Instalation is now completed. You can use this settings to connect to the server:​\nIP:​ $ip:​$port\nUser:​ admin\nPassword:​ admin" 0 0
 + ;;
 +
 + "​Madsonic"​)
 + pacman -S --noconfirm ffmpeg flac lame
 + sed -i '/​%wheel ALL=(ALL) ALL/​s/​^/#/​g'​ /​etc/​sudoers #Comment the line matching that string
 + sed -i '/​%wheel ALL=(ALL) NOPASSWD: ALL/​s/​^#//​g'​ /​etc/​sudoers #Uncomment the line matching that string
 + sudo -u $user yaourt -S -A --noconfirm madsonic
 + sed -i '/​%wheel ALL=(ALL) NOPASSWD: ALL/​s/​^/#/​g'​ /​etc/​sudoers #Comment the line matching that string
 + sed -i '/​%wheel ALL=(ALL) ALL/​s/​^#//​g'​ /​etc/​sudoers #Uncomment the line matching that string
 + cd /​var/​madsonic
 + test -d transcode || mkdir transcode
 + chown -R root:root transcode
 + mkdir /​var/​madsonic/​transcode
 + cd /​var/​madsonic/​transcode
 + ln -s "​$(which ffmpeg)"​
 + ln -s "​$(which flac)"
 + ln -s "​$(which lame)"
 +
 + dialog --backtitle "​ArchLinux Installation"​ --title "​Madsonic Configuration"​ \
 + --yesno "Do you want to change the default HTTP port(4040) of Madsonic?"​ 7 60
 + response=$?​
 + case $response in
 + 0) ​ port=$(dialog --backtitle "​Archlinux Installation"​ --title "​Madsonic Configuration"​ \
 + --inputbox "Enter the port that you want to use:" 8 40 2>&1 > /dev/tty)
 + if [ "​$?"​ = "​0"​ ]
 + then
 + sed -i "​s/​MADSONIC_PORT=4040/​MADSONIC_PORT=$port/​g"​ /​var/​madsonic/​madsonic.sh
 + fi;;
 + 1) echo "HTTP port not changed";;​
 + esac
 +
 + dialog --backtitle "​ArchLinux Installation"​ --title "​Madsonic Configuration"​ \
 + --yesno "Do you want to add a HTTPS port to Madsonic?"​ 7 60
 + response=$?​
 + case $response in
 + 0) ​ port=$(dialog --backtitle "​Archlinux Installation"​ --title "​Madsonic Configuration"​ \
 + --inputbox "Enter the port that you want to use:" 8 40 2>&1 > /dev/tty)
 + if [ "​$?"​ = "​0"​ ]
 + then
 + sed -i "​s/​MADSONIC_HTTPS_PORT=0/​MADSONIC_HTTPS_PORT=$port/​g"​ /​var/​madsonic/​madsonic.sh
 + fi;;
 + 1) echo "HTTPS port not configured";;​
 + esac
 + systemctl enable madsonic
 + systemctl start madsonic
 + dialog --backtitle "​ArchLinux Installation"​ --title "​Madsonic Installation"​ \
 + --msgbox "​Madsonic Instalation is now completed. You can use this settings to connect to the server:​\nIP:​ $ip:​$port\nUser:​ admin\nPassword:​ admin" 0 0
 + ;;
 +
 + "​GitLab"​)
 + ip=$(ip a | grep inet | grep -v inet6 | grep -v host | awk -F " " '​{print $2}' | awk -F "/"​ '​{print $1}')
 + gitport=8080
 + gitdomain=$ip
 + if [[ $LAMP != 1 ]];then
 + pacman -S --noconfirm mariadb
 + ##​MariaDB
 + mysql_install_db --user=mysql --basedir=/​usr --datadir=/​var/​lib/​mysql
 + systemctl start mysqld
 + systemctl enable mysqld
 +
 + #Ask for the password of the root's database username
 + rpassword=$(dialog --backtitle "​Archlinux Installation"​ --passwordbox "Enter the root's password for MySQL/​MariaDB:"​ 8 40 2>&1 > /dev/tty)
 + if [ "​$?"​ = "​0"​ ]
 + then
 + /​usr/​bin/​mysqladmin -u root password $rpassword
 + fi
 + fi
 +
 + sed -i '/​%wheel ALL=(ALL) ALL/​s/​^/#/​g'​ /​etc/​sudoers #Comment the line matching that string
 + sed -i '/​%wheel ALL=(ALL) NOPASSWD: ALL/​s/​^#//​g'​ /​etc/​sudoers #Uncomment the line matching that string
 + sudo -u $user yaourt -S -A --noconfirm ruby-2.1
 + sudo -u $user yaourt -S -A --noconfirm gitlab
 + sed -i '/​%wheel ALL=(ALL) NOPASSWD: ALL/​s/​^/#/​g'​ /​etc/​sudoers #Comment the line matching that string
 + sed -i '/​%wheel ALL=(ALL) ALL/​s/​^#//​g'​ /​etc/​sudoers #Uncomment the line matching that string
 +
 + gitsqlpass=$(dialog --backtitle "​Archlinux Installation"​ --passwordbox "Enter gitlabs'​s database password:"​ 0 0 2>&1 > /dev/tty)
 + gitsqlusernumber=$(cat -n /​etc/​webapps/​gitlab/​database.yml | grep "​username:​ gitlab"​ | awk -F " " '​{print $1}' | head -1)
 + gitsqlusernumber=$[$gitsqlusernumber+1]
 + sed -i "​${gitsqlusernumber}s/​.*/ ​ password: $gitsqlpass/​g"​ /​etc/​webapps/​gitlab/​database.yml
 + gitsqlrootnumber=$(cat -n /​etc/​webapps/​gitlab/​database.yml | grep "​username:​ root" | awk -F " " '​{print $1}' | head -1)
 + gitsqlrootnumber=$[$gitsqlrootnumber+1]
 + sed -i "​${gitsqlrootnumber}s/​.*/ ​ password: $rpassword/​g"​ /​etc/​webapps/​gitlab/​database.yml
 +
 + sed -i '​s/​listen "​127.0.0.1:​8080"/​listen "​*:​8080"/​g'​ /​etc/​webapps/​gitlab/​unicorn.rb
 + dialog --backtitle "​ArchLinux Installation"​ --title "​GitLab Installation"​ \
 + --yesno "Do you want to change the listening port?​\nDefault:​ 8080" 7 45
 + if [[ $? == 0 ]];then
 + gitport=$(dialog --backtitle "​Archlinux Installation"​ --inputbox "Enter the port that you want to use:" 0 0 2>&1 > /dev/tty)
 + sed -i "​s/:​8080/:​$gitport/​g"​ /​etc/​webapps/​gitlab/​unicorn.rb
 + fi
 +
 + dialog --backtitle "​ArchLinux Installation"​ --title "​GitLab Installation"​ \
 + --yesno "Do you want to configure a domain?"​ 7 38
 + if [[ $? == 0 ]];then
 + gitdomain=$(dialog --backtitle "​Archlinux Installation"​ --inputbox "Enter the domain that you want to use:" 0 0 2>&1 > /dev/tty)
 + gitdomainline=$(cat /​usr/​share/​webapps/​gitlab/​config/​gitlab.yml -n | grep "Web server settings"​ | awk -F " " '​{print $1}' | head -1)
 + gitdomainline=$[$gitdomainline+1]
 + sed -i "​${gitsqlrootnumber}s/​.*/ ​   host: $gitdomain/​g"​ /​usr/​share/​webapps/​gitlab/​config/​gitlab.yml
 + else
 + gitdomainline=$(cat /​usr/​share/​webapps/​gitlab/​config/​gitlab.yml -n | grep "Web server settings"​ | awk -F " " '​{print $1}' | head -1)
 + gitdomainline=$[$gitdomainline+1]
 + sed -i "​${gitsqlrootnumber}s/​.*/ ​   host: $ip/g" /​usr/​share/​webapps/​gitlab/​config/​gitlab.yml
 + fi
 + sed -i "​s/​port:​ 80/port: $gitport/​g"​ /​etc/​webapps/​gitlab/​gitlab.yml
 + sed -i "​s/:​8080\x2F\x22/:​$gitport\x2F\x22/​g"​ /​etc/​webapps/​gitlab-shell/​config.yml
 + cd /​usr/​share/​webapps/​gitlab ; printf "​yes\n$rpassword"​ | bundle exec rake gitlab:​setup RAILS_ENV=production
 + su - gitlab -s /bin/sh -c "cd '/​usr/​share/​webapps/​gitlab';​ bundle exec rake assets:​precompile RAILS_ENV=production"​
 + systemctl start gitlab-sidekiq.service gitlab-unicorn
 + systemctl enable gitlab-sidekiq.service gitlab-unicorn
 + dialog --backtitle "​ArchLinux Installation"​ --title "​GitLab Installation"​ \
 + --msgbox "​GitLab Instalation is now completed. You can use this settings to connect to the server:​\nIP:​ $gitdomain\nPort:​ $gitport\nUser:​ root\nPassword:​ 5iveL!fe"​ 0 0
 + ;;
 +
 + "​Gogs"​)
 + sed -i '/​%wheel ALL=(ALL) ALL/​s/​^/#/​g'​ /​etc/​sudoers #Comment the line matching that string
 + sed -i '/​%wheel ALL=(ALL) NOPASSWD: ALL/​s/​^#//​g'​ /​etc/​sudoers #Uncomment the line matching that string
 + sudo -u $user yaourt -S -A --noconfirm gogs
 + sed -i '/​%wheel ALL=(ALL) NOPASSWD: ALL/​s/​^/#/​g'​ /​etc/​sudoers #Comment the line matching that string
 + sed -i '/​%wheel ALL=(ALL) ALL/​s/​^#//​g'​ /​etc/​sudoers #Uncomment the line matching that string
 + systemctl start gogs
 + systemctl enable gogs
 + ;;
 +
 + "​NTOP"​)
 + pacman -S --noconfirm ntop
 + ntoppass=$(dialog --backtitle "​Archlinux Installation"​ --passwordbox "Enter NTOP's admin password:"​ 8 40 2>&1 > /dev/tty)
 + ntop --set-admin-password=$ntoppass
 + patterns=$(echo -e "​en\nwl"​)
 + interfaces=$(ip a | grep -E "​$patterns"​ | grep -v inet | grep -v loop | grep -v link | grep -v DOWN | awk -F " " '​{print $2}' | sed '​s/://​g'​ | sed 's/$/ net/')
 + interface=$(dialog --backtitle "​ArchLinux Installation"​ --clear --title "​Interface:​ " \
 + --menu "In what interface do you want to run NTOP?" 0 0 0 ${interfaces} 2>&1 > /dev/tty)
 + sed -i "s/-i eth0/-i $interface/​g"​ /​lib/​systemd/​system/​ntop.service
 + ntopport=3000
 + dialog --backtitle "​ArchLinux Installation"​ --title "NTOP Instalation"​ --yesno "Do you want to change the default port for NTOP?​\n(Default:​ 3000)" 8 45
 + if [[ $? == "​0"​ ]];then
 + ntopport=$(dialog --backtitle "​ArchLinux Installation"​ --title "NTOP Instalation"​ --inputbox "Enter the port that you want to use: " 8 40 2>&1 > /dev/tty)
 + sed -i "s/-w 3000/-w $ntopport/​g"​ /​lib/​systemd/​system/​ntop.service
 + fi
 + systemctl daemon-reload
 + systemctl enable ntop
 + systemctl start ntop
 + dialog --backtitle "​ArchLinux Installation"​ --title "NTOP Installation"​ \
 + --msgbox "NTOP Instalation is now completed. You can use this settings to connect to the server:​\nIP:​ $ip:​$ntopport\nUser:​ admin\nPassword:​ $ntoppass"​ 0 0
 + ;;
 +
 + "​TightVNC"​)
 + sessions=$(ls /​usr/​share/​xsessions | awk -F "​."​ '​{print $1" "​$2}'​)
 + sed -i '/​%wheel ALL=(ALL) ALL/​s/​^/#/​g'​ /​etc/​sudoers #Comment the line matching that string
 + sed -i '/​%wheel ALL=(ALL) NOPASSWD: ALL/​s/​^#//​g'​ /​etc/​sudoers #Uncomment the line matching that string
 + sudo -u $user yaourt -S -A --noconfirm tightvnc
 + sed -i '/​%wheel ALL=(ALL) NOPASSWD: ALL/​s/​^/#/​g'​ /​etc/​sudoers #Comment the line matching that string
 + sed -i '/​%wheel ALL=(ALL) ALL/​s/​^#//​g'​ /​etc/​sudoers #Uncomment the line matching that string
 +
 + cp /​lib/​systemd/​system/​vncserver.service /​lib/​systemd/​system/​vncserver@:​1.service
 + sudo -u $user vncpasswd
 + interface=$(dialog --backtitle "​ArchLinux Installation"​ --clear --title "​TightVNC Installation"​ \
 + --menu "What desktop would you like to setup the VNC?" 0 0 0 ${sessions} 2>&1 > /dev/tty)
 + mv /​home/​$user/​.vnc/​xstartup /​home/​$user/​.vnc/​xstartup.bak
 + cat /​usr/​share/​xsessions/​$interface.desktop | grep Exec | grep -v Try | sed '​s/​^Exec=//​g'​ > /​home/​$user/​.vnc/​xstartup
 + sed -i "​s/​User=/​User=$user/​g"​ /​lib/​systemd/​system/​vncserver@:​1.service
 + systemctl enable vncserver@:​1
 + systemctl start vncserver@:​1
 + dialog --backtitle "​ArchLinux Installation"​ --title "​TightVNC Installation"​ \
 + --msgbox "​TightVNC Instalation is now completed. You can use this settings to connect to the server:​\nIP:​ $ip:​5901\nPassword:​ The one you entered at the VNC configuration"​ 0 0
 +
 + ;;
 +
 + "​Deluge"​)
 + pacman -S --noconfirm deluge python2-pip python2-mako
 + pip2.7 install service-identity
 + delugeport=8112
 + dialog --backtitle "​ArchLinux Installation"​ --title "​Deluge Instalation"​ --yesno "Do you want to change the default port for Deluge?​\n(Default:​ 8112)" 8 45
 + if [[ $? == "​0"​ ]];then
 + delugeport=$(dialog --backtitle "​ArchLinux Installation"​ --title "NTOP Instalation"​ --inputbox "Enter the port that you want to use: " 8 40 2>&1 > /dev/tty)
 + sed -i "​s/​8112/​$delugeport/​g"​ /​srv/​deluge/​.config/​deluge/​web.conf
 + fi
 + systemctl start deluged
 + systemctl enable deluged
 + systemctl start deluge-web
 + systemctl enable deluge-web
 + dialog --backtitle "​ArchLinux Installation"​ --title "​Deluge Installation"​ \
 + --msgbox "​Deluge Instalation is now completed. You can use this settings to connect to the server:​\nIP:​ $ip:​$delugeport\nPassword:​ deluge"​ 0 0
 + ;;
 +
 + "​L2TP"​)
 + patterns=$(echo -e "​en\nwl"​)
 + interfaces=$(ip a | grep -E "​$patterns"​ | grep -v inet | grep -v loop | grep -v link | grep -v DOWN | awk -F " " '​{print $2}' | sed '​s/://​g'​ | sed 's/$/ net/')
 +
 + iface=$(dialog --backtitle "​ArchLinux Installation"​ --clear --title "​Interface:​ " \
 + --menu "In what interface do you want to setup the VPN Server?"​ 20 30 7 ${interfaces} 2>&1 > /dev/tty)
 +
 + net=$(ip addr show dev $iface | grep "inet " | awk -F ' ' '​{print $4}' | sed '​s/​255/​0/​g'​)
 + ip=$(ip addr show dev $iface | grep "inet " | awk -F ' ' '​{print $2}' | sed '​s/​\x2F24//​g'​)
 + gateway=$(ip route show dev $iface | grep default | awk -F " " '​{print $3}')
 +
 + pacman -S --noconfirm xl2tpd ppp lsof python2
 + sed -i '/​%wheel ALL=(ALL) ALL/​s/​^/#/​g'​ /​etc/​sudoers #Comment the line matching that string
 + sed -i '/​%wheel ALL=(ALL) NOPASSWD: ALL/​s/​^#//​g'​ /​etc/​sudoers #Uncomment the line matching that string
 + sudo -u $user yaourt -A -S --noconfirm openswan
 + sed -i '/​%wheel ALL=(ALL) NOPASSWD: ALL/​s/​^/#/​g'​ /​etc/​sudoers #Comment the line matching that string
 + sed -i '/​%wheel ALL=(ALL) ALL/​s/​^#//​g'​ /​etc/​sudoers #Uncomment the line matching that string
 + iptables --table nat --append POSTROUTING --jump MASQUERADE
 + echo "​net.ipv4.ip_forward = 1" |  tee -a /​etc/​sysctl.conf
 + echo "​net.ipv4.conf.all.accept_redirects = 0" |  tee -a /​etc/​sysctl.conf
 + echo "​net.ipv4.conf.all.send_redirects = 0" |  tee -a /​etc/​sysctl.conf
 + echo "​net.ipv4.conf.default.rp_filter = 0" |  tee -a /​etc/​sysctl.conf
 + echo "​net.ipv4.conf.default.accept_source_route = 0" |  tee -a /​etc/​sysctl.conf
 + echo "​net.ipv4.conf.default.send_redirects = 0" |  tee -a /​etc/​sysctl.conf
 + echo "​net.ipv4.icmp_ignore_bogus_error_responses = 1" |  tee -a /​etc/​sysctl.conf
 + for vpn in /​proc/​sys/​net/​ipv4/​conf/​*
 + do
 + echo 0 > $vpn/​accept_redirects
 + echo 0 > $vpn/​send_redirects
 + done
 + sysctl -p
 + printf "​\x23\x21/​usr/​bin/​env bash\nfor vpn in /​proc/​sys/​net/​ipv4/​conf/​*;​ do\n\techo 0 > \x24vpn/​accept_redirects;​\n\techo 0 > \x24vpn/​send_redirects;​\ndone\niptables --table nat --append POSTROUTING --jump MASQUERADE\n\nsysctl -p" > /​usr/​local/​bin/​vpn-boot.sh
 + chmod 755 /​usr/​local/​bin/​vpn-boot.sh
 + printf "​[Unit]\nDescription=VPN Settings at boot\nAfter=netctl@$iface.service\nBefore=openswan.service xl2tpd.service\n\n[Service]\nExecStart=/​usr/​local/​bin/​vpn-boot.sh\n\n[Install]\nWantedBy=multi-user.target\n"​ > /​etc/​systemd/​system/​vpnboot.service
 + systemctl enable vpnboot.service
 + #IPSEC Configuration
 + sed -i "​s/​\x23 plutoopts=\x22--perpeerlog\x22/​plutoopts=\x22--interface=$iface\x22/​g"​ /​etc/​ipsec.conf
 + sed -i "​s/​virtual_private=%v4:​10.0.0.0\x2F8,​%v4:​192.168.0.0\x2F16,​%v4:​172.16.0.0\x2F12,​%v4:​25.0.0.0\x2F8,​%v6:​fd00::​\x2F8,​%v6:​fe80::​\x2F10/​virtual_private=%v4:​10.0.0.0\x2F8,​%v4:​192.168.0.0\x2F16,​%v4:​$net\x2F24,​%v4:​172.16.0.0\x2F12,​%v4:​25.0.0.0\x2F8,​%v6:​fd00::​\x2F8,​%v6:​fe80::​\x2F10/​g"​ /​etc/​ipsec.conf
 + sed -i "​s/​protostack=auto/​protostack=netkey/​g"​ /​etc/​ipsec.conf
 + sed -i '/#​plutostderrlog=\x2Fdev\x2Fnull/​a \\tforce_keepalive=yes\n\tkeep_alive=60\n\t#​ Send a keep-alive packet every 60 seconds.'​ /​etc/​ipsec.conf
 + printf "​\nconn L2TP-PSK-noNAT\n\tauthby=secret\n\t#​shared secret. Use rsasig for certificates.\n\n\tpfs=no\n\t#​Not enable pfs\n\n\tauto=add\n\n\t#​the ipsec tunnel should be started and routes created when the ipsec daemon itself starts.\n\n\tkeyingtries=3\n\t#​Only negotiate a conn. 3 times.\n\n\tikelifetime=8h\n\tkeylife=1h\n\n\ttype=transport\n\t#​because we use l2tp as tunnel protocol\n\n\tleft=$ip\n\t#​fill in server IP above\n\tleftnexthop=$gateway\n\tleftprotoport=17/​1701\n\n\tright=\x25any\n\trightprotoport=17/​\x25any\n\trightsubnetwithin=0.0.0.0/​0\n\n\tdpddelay=10\n\t#​ Dead Peer Dectection (RFC 3706) keepalives delay\n\tdpdtimeout=20\n\t# ​ length of time (in seconds) we will idle without hearing either an R_U_THERE poll from our peer, or an R_U_THERE_ACK reply.\n\tdpdaction=clear\n\t#​ When a DPD enabled peer is declared dead, what action should be taken. clear means the eroute and SA with both be cleared.\n"​ >> /​etc/​ipsec.conf
 + echo -e "$ip %any:\t PSK \x22$(openssl rand -hex 30)\x22"​ > /​etc/​ipsec.secrets
 + systemctl start openswan
 + ipsec verify
 + systemctl enable openswan
 + printf "​[global]\nipsec saref = yes\nsaref refinfo = 30\nauth file = /​etc/​ppp/​pap-secrets\nlisten-addr = $ip\n\n[lns default]\nip range = 172.16.1.30-172.16.1.100\nlocal ip = 172.16.1.1\nrequire authentication = yes\nppp debug = no\npppoptfile = /​etc/​ppp/​options.xl2tpd\nlength bit = yes" > /​etc/​xl2tpd/​xl2tpd.conf
 + mkdir /​var/​run/​xl2tpd/​
 + #printf "​ms-dns 8.8.8.8\nms-dns 8.8.4.4\nauth\nmtu 1200\nmru 1000\ncrtscts\nhide-password\nmodem\nname l2tpd\nproxyarp\nlcp-echo-interval 30\nlcp-echo-failure 4\nlogin"​ > /​etc/​ppp/​options.xl2tpd
 + printf "​ipcp-accept-local\nipcp-accept-remote\nms-dns 8.8.8.8\nms-dns 8.8.4.4\nauth\nmtu 1200\nmru 1000\ncrtscts\nhide-password\nmodem\nname l2tpd\nproxyarp\nlcp-echo-interval 30\nlcp-echo-failure 4\nlogin"​ > /​etc/​ppp/​options.xl2tpd
 +
 + ##PAM Auth
 + echo -e "​\nunix authentication = yes" >> /​etc/​xl2tpd/​xl2tpd.conf
 + printf "​auth\trequired\tpam_nologin.so\nauth\trequired\tpam_unix.so\naccount required\tpam_unix.so\nsession required\tpam_unix.so"​ > /​etc/​pam.d/​ppp
 + echo -e "​*\tl2tpd\t\x22\x22\t*"​ >> /​etc/​ppp/​pap-secrets
 +
 + systemctl restart openswan
 + systemctl restart xl2tpd
 + systemctl enable xl2tpd
 + externalip=$(dig +short myip.opendns.com @resolver1.opendns.com)
 + dialog --backtitle "​ArchLinux Installation"​ --title "L2TP Installation"​ \
 + --msgbox "L2TP + IPSEC + PAM Instalation is now completed. You can use this settings to connect to the server:​\nExternal IP: $externalip\nUser:​ Your system username\nPassword:​ Your system password according to the user" 0 0
 + ;;
 + esac
 + done
 +fi
 +
 +#Disable root automatic login tn tty1
 +rm -R /​etc/​systemd/​system/​getty@tty1.service.d
 +sed -i 's/sh post-install.sh//​g'​ /​root/​.bashrc
 +rm /​root/​.bash_profile
 +
 +#Delete the scripts and reboot
 +rm post-install.sh
 +reboot
 +</​file>​
arch_inst_script.txt · Last modified: 2018/03/06 08:59 (external edit)
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0