====== 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
#!/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 '
#!/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
#!/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 '
#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\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" > /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