diff options
Diffstat (limited to 'archfi')
-rwxr-xr-x | archfi | 1147 |
1 files changed, 1147 insertions, 0 deletions
@@ -0,0 +1,1147 @@ +#!/bin/bash + +# Arch Linux Fast Install (archfi) +# -------------------------------- +# author : matmoul[@sourceforge.net] +# project : http://sourceforge.net/projects/archfi +# license : GPLv3 (http://opensource.org/licenses/GPL-3.0) +# +# referance : https://wiki.archlinux.org/index.php/Installation_guide + + +apptitle="Arch Linux Fast Install (archfi) - Version: 2015.06.28.20.37.40 (GPLv3)" +baseurl=https://raw.githubusercontent.com/MatMoul/archfi/master + + + +# -------------------------------------------------------- +mainmenu(){ + if [ "$1" = "" ]; then + nextitem="." + else + nextitem=$1 + fi + options=() + options+=("$txtlanguage" "") + options+=("$txtsetkeymap" "(loadkeys ...)") + options+=("$txtdiskpartmenu" "") + options+=("$txtselectpartsmenu" "") + options+=("" "") + options+=("$txthelp" "") + options+=("$txtchangelog" "") + options+=("" "") + options+=("$txtreboot" "") + sel=$(whiptail --backtitle "$apptitle" --title "$txtmainmenu" --menu "" --cancel-button "Exit" --default-item "$nextitem" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + case $sel in + "$txtlanguage") + chooselanguage + nextitem="$txtsetkeymap" + ;; + "$txtsetkeymap") + setkeymap + nextitem="$txtdiskpartmenu" + ;; + "$txtdiskpartmenu") + diskpartmenu + nextitem="$txtselectpartsmenu" + ;; + "$txtselectpartsmenu") + selectparts + nextitem="$txtreboot" + ;; + "$txthelp") + help + nextitem="$txtreboot" + ;; + "$txtchangelog") + showchangelog + nextitem="$txtreboot" + ;; + "$txtreboot") + rebootpc + nextitem="$txtreboot" + ;; + esac + mainmenu "$nextitem" + else + clear + fi +} + + +chooselanguage(){ + options=() + options+=("English" "(By MatMoul)") + options+=("French" "(By MatMoul)") + sel=$(whiptail --backtitle "$apptitle" --title "$txtlanguage" --menu "" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + clear + if [ "$sel" = "English" ]; then + loadstrings + else + eval $(curl -L $baseurl/lng/$sel | sed '/^#/ d') + #if [ "$learning" = "1" ]; then + # eval $(curl -L $baseurl/learn/$sel | sed '/^#/ d') + #fi + fi + fi +} + +setkeymap(){ + learn setkeymap + items=$(localectl list-keymaps) + options=() + for item in $items; do + options+=("$item" "") + done + keymap=$(whiptail --backtitle "$apptitle" --title "$txtsetkeymap" --menu "" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + clear + loadkeys $keymap + fi +} + +help(){ + msg="" + msg=$msg"Command arguments :\n" + msg=$msg" -h --help : Show this help message\n" + msg=$msg" -l --learning : Show learning messages for each operations.\n" + msg=$msg"\n" + whiptail --backtitle "$apptitle" --title "$txthelp" --msgbox "$msg" 0 0 +} + +showchangelog(){ + clear + curl -L $baseurl/CHANGELOG > ~/archfi-CHANGELOG + less ~/archfi-CHANGELOG + rm ~/archfi-CHANGELOG +} + +rebootpc(){ + if (whiptail --backtitle "$apptitle" --title "$txtreboot" --yesno "$txtreboot ?" --defaultno 0 0) then + learn reboot + clear + reboot + fi +} +# -------------------------------------------------------- + + + +# -------------------------------------------------------- +diskpartmenu(){ + if [ "$1" = "" ]; then + learn diskpart + nextitem="." + else + nextitem=$1 + fi + options=() + if [ "$eficomputer" == "0" ]; then + options+=("$txtautoparts (gpt)" "") + options+=("$txtautoparts (dos)" "") + options+=("$txtautoparts (gpt,efi)" "") + options+=("$txtautoparts (gpt,bios+efi,noswap)" "") + else + options+=("$txtautoparts (gpt,efi)" "") + options+=("$txtautoparts (gpt)" "") + options+=("$txtautoparts (dos)" "") + options+=("$txtautoparts (gpt,bios+efi,noswap)" "") + fi + options+=("$txteditparts (cfdisk)" "") + options+=("$txteditparts (cgdisk)" "") + sel=$(whiptail --backtitle "$apptitle" --title "$txtdiskpartmenu" --menu "" --cancel-button "Back" --default-item "$nextitem" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + case $sel in + "$txtautoparts (dos)") + diskpartautodos + nextitem="$txtautoparts (dos)" + ;; + "$txtautoparts (gpt)") + diskpartautogpt + nextitem="$txtautoparts (gpt)" + ;; + "$txtautoparts (gpt,efi)") + diskpartautoefi + nextitem="$txtautoparts (gpt,efi)" + ;; + "$txtautoparts (gpt,bios+efi,noswap)") + diskpartautoefiusb + nextitem="$txtautoparts (gpt,bios+efi,noswap)" + ;; + "$txteditparts (cfdisk)") + diskpartcfdisk + nextitem="$txteditparts (cfdisk)" + ;; + "$txteditparts (cgdisk)") + diskpartcgdisk + nextitem="$txteditparts (cgdisk)" + ;; + esac + diskpartmenu "$nextitem" + fi +} + + +diskpartautodos(){ + learn diskpartautodos + items=$(lsblk -d -p -n -l -o NAME -e 7,11) + options=() + for item in $items; do + options+=("$item" "") + done + device=$(whiptail --backtitle "$apptitle" --title "$txtautoparts (dos)" --menu "" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + if (whiptail --backtitle "$apptitle" --title "$txtautoparts (dos)" --yesno "${txtautopartsconfirm//%1/$device}" --defaultno 0 0) then + clear + echo "$txtautopartclear" + parted $device mklabel msdos + sleep 1 + echo "${txtautopartcreate//%1/boot}" + echo -e "n\np\n\n\n+512M\na\nw" | fdisk $device + sleep 1 + echo "${txtautopartcreate//%1/swap}" + swapsize=$(cat /proc/meminfo | grep MemTotal | awk '{ print $2 }') + swapsize=$(($swapsize/1000))"M" + echo -e "n\np\n\n\n+$swapsize\nt\n\n82\nw" | fdisk $device + sleep 1 + echo "${txtautopartcreate//%1/root}" + echo -e "n\np\n\n\n\nw" | fdisk $device + sleep 1 + echo "" + pressanykey + bootdev=$device"1" + swapdev=$device"2" + rootdev=$device"3" + efimode="0" + fi + fi +} + +diskpartautogpt(){ + learn diskpartautogpt + items=$(lsblk -d -p -n -l -o NAME -e 7,11) + options=() + for item in $items; do + options+=("$item" "") + done + device=$(whiptail --backtitle "$apptitle" --title "$txtautoparts (gpt)" --menu "" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + if (whiptail --backtitle "$apptitle" --title "$txtautoparts (gpt)" --yesno "${txtautopartsconfirm//%1/$device}" --defaultno 0 0) then + clear + echo "$txtautopartclear" + parted $device mklabel gpt + echo "${txtautopartcreate//%1/BIOS boot}" + sgdisk $device -n=1:0:+31M -t=1:ef02 + echo "${txtautopartcreate//%1/boot}" + sgdisk $device -n=2:0:+512M + echo "${txtautopartcreate//%1/swap}" + swapsize=$(cat /proc/meminfo | grep MemTotal | awk '{ print $2 }') + swapsize=$(($swapsize/1000))"M" + sgdisk $device -n=3:0:+$swapsize -t=3:8200 + echo "${txtautopartcreate//%1/root}" + sgdisk $device -n=4:0:0 + echo "" + pressanykey + bootdev=$device"2" + swapdev=$device"3" + rootdev=$device"4" + efimode="0" + fi + fi +} + +diskpartautoefi(){ + learn diskpartautoefi + items=$(lsblk -d -p -n -l -o NAME -e 7,11) + options=() + for item in $items; do + options+=("$item" "") + done + device=$(whiptail --backtitle "$apptitle" --title "$txtautoparts (gpt,efi)" --menu "" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + if (whiptail --backtitle "$apptitle" --title "$txtautoparts (gpt,efi)" --yesno "${txtautopartsconfirm//%1/$device}" --defaultno 0 0) then + clear + echo "$txtautopartclear" + parted $device mklabel gpt + echo "${txtautopartcreate//%1/EFI boot}" + sgdisk $device -n=1:0:+1024M -t=1:ef00 + echo "${txtautopartcreate//%1/swap}" + swapsize=$(cat /proc/meminfo | grep MemTotal | awk '{ print $2 }') + swapsize=$(($swapsize/1000))"M" + sgdisk $device -n=3:0:+$swapsize -t=3:8200 + echo "${txtautopartcreate//%1/root}" + sgdisk $device -n=4:0:0 + echo "" + pressanykey + bootdev=$device"1" + swapdev=$device"3" + rootdev=$device"4" + efimode="1" + fi + fi +} + +diskpartautoefiusb(){ + learn diskpartautoefiusb + items=$(lsblk -d -p -n -l -o NAME -e 7,11) + options=() + for item in $items; do + options+=("$item" "") + done + device=$(whiptail --backtitle "$apptitle" --title "$txtautoparts (gpt,efi)" --menu "" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + if (whiptail --backtitle "$apptitle" --title "$txtautoparts (gpt,efi)" --yesno "${txtautopartsconfirm//%1/$device}" --defaultno 0 0) then + clear + echo "$txtautopartclear" + parted $device mklabel gpt + echo "${txtautopartcreate//%1/EFI boot}" + sgdisk $device -n=1:0:+1024M -t=1:ef00 + echo "${txtautopartcreate//%1/BIOS boot}" + sgdisk $device -n=3:0:+31M -t=3:ef02 + echo "${txtautopartcreate//%1/root}" + sgdisk $device -n=4:0:0 + echo "$txthybridpartcreate" + echo -e "r\nh\n3\nN\n\nY\nN\nw\nY\n" | gdisk $device + echo "" + pressanykey + bootdev=$device"1" + swapdev= + rootdev=$device"4" + efimode="2" + fi + fi +} + +diskpartcfdisk(){ + learn diskpartcfdisk + items=$(lsblk -d -p -n -l -o NAME -e 7,11) + options=() + for item in $items; do + options+=("$item" "") + done + device=$(whiptail --backtitle "$apptitle" --title "$txteditparts (cfdisk)" --menu "" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + clear + cfdisk $device + fi +} + +diskpartcgdisk(){ + learn diskpartcgdisk + items=$(lsblk -d -p -n -l -o NAME -e 7,11) + options=() + for item in $items; do + options+=("$item" "") + done + device=$(whiptail --backtitle "$apptitle" --title "$txteditparts (cfdisk)" --menu "" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + clear + cgdisk $device + fi +} +# -------------------------------------------------------- + + + +# -------------------------------------------------------- +selectparts(){ + learn selectparts + + items=$(lsblk -p -n -l -o NAME -e 7,11) + options=() + for item in $items; do + options+=("$item" "") + done + + bootdev=$(whiptail --backtitle "$apptitle" --title "$txtselectpartsmenu" --menu "${txtselectdevice//%1/boot}" --default-item "$bootdev" 0 0 0 \ + "none" "-" \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ ! "$?" = "0" ]; then + return 1 + else + if [ "$bootdev" = "none" ]; then + bootdev= + fi + fi + + swapdev=$(whiptail --backtitle "$apptitle" --title "$txtselectpartsmenu" --menu "${txtselectdevice//%1/swap}" --default-item "$swapdev" 0 0 0 \ + "none" "-" \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ ! "$?" = "0" ]; then + return 1 + else + if [ "$swapdev" = "none" ]; then + swapdev= + fi + fi + + rootdev=$(whiptail --backtitle "$apptitle" --title "$txtselectpartsmenu" --menu "${txtselectdevice//%1/root}" --default-item "$rootdev" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ ! "$?" = "0" ]; then + return 1 + fi + + homedev=$(whiptail --backtitle "$apptitle" --title "$txtselectpartsmenu" --menu "${txtselectdevice//%1/home}" 0 0 0 \ + "none" "-" \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ ! "$?" = "0" ]; then + return 1 + else + if [ "$homedev" = "none" ]; then + homedev= + fi + fi + + msg="$txtselecteddevices\n\n" + msg=$msg"boot : "$bootdev"\n" + msg=$msg"swap : "$swapdev"\n" + msg=$msg"root : "$rootdev"\n" + msg=$msg"home : "$homedev"\n\n" + if (whiptail --backtitle "$apptitle" --title "$txtselectpartsmenu" --yesno "$msg" 0 0) then + mountmenu + fi +} +# -------------------------------------------------------- + + + +# -------------------------------------------------------- +mountmenu(){ + if [ "$1" = "" ]; then + nextitem="." + else + nextitem=$1 + fi + options=() + options+=("$txtformatdevices" "") + options+=("$txtmount" "$txtmountdesc") + sel=$(whiptail --backtitle "$apptitle" --title "$txtformatmountmenu" --menu "" --cancel-button "Back" --default-item "$nextitem" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + case $sel in + "$txtformatdevices") + formatdevices + nextitem="$txtmount" + ;; + "$txtmount") + mountparts + nextitem="$txtmount" + ;; + esac + mountmenu "$nextitem" + fi +} + + +formatdevices(){ + if (whiptail --backtitle "$apptitle" --title "$txtformatdevices" --yesno "$txtformatdeviceconfirm" --defaultno 0 0) then + if [ ! "$bootdev" = "" ]; then + formatbootdevice boot $bootdev + fi + if [ ! "$swapdev" = "" ]; then + formatswapdevice + fi + formatdevice root $rootdev + if [ ! "$homedev" = "" ]; then + formatdevice home $homedev + fi + fi +} +formatbootdevice(){ + learn formatbootdevice + options=() + if [ "$efimode" == "1" ]||[ "$efimode" = "2" ]; then + options+=("fat32" "(EFI)") + fi + options+=("ext2" "") + options+=("ext3" "") + options+=("ext4" "") + if [ ! "$efimode" = "1" ]&&[ ! "$efimode" = "2" ]; then + options+=("fat32" "(EFI)") + fi + sel=$(whiptail --backtitle "$apptitle" --title "$txtformatdevice" --menu "${txtselectpartformat//%1/$1 ($2)}" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ ! "$?" = "0" ]; then + return 1 + fi + clear + echo "${txtformatingpart//%1/$2} $sel" + echo "----------------------------------------------" + case $sel in + ext2) mkfs.ext2 $2;; + ext3) mkfs.ext3 $2;; + ext4) mkfs.ext4 $2;; + fat32) mkfs.fat $2;; + esac + echo "" + pressanykey +} +formatswapdevice(){ + learn formatswapdevice + clear + echo "${txtformatingpart//%1/$swapdev} swap" + echo "----------------------------------------------" + mkswap $swapdev + echo "" + pressanykey +} +formatdevice(){ + learn formatdevice + options=() + options+=("btrfs" "") + options+=("reiserfs" "") + options+=("ext4" "") + options+=("ext3" "") + options+=("ext2" "") + options+=("xfs" "") + options+=("jfs" "") + sel=$(whiptail --backtitle "$apptitle" --title "$txtformatdevice" --menu "${txtselectpartformat//%1/$1 ($2)}" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ ! "$?" = "0" ]; then + return 1 + fi + clear + echo "${txtformatingpart//%1/$2} $sel" + echo "----------------------------------------------" + case $sel in + btrfs) mkfs.btrfs -f $2;; + reiserfs) mkfs.reiserfs -f $2;; + ext4) mkfs.ext4 $2;; + ext3) mkfs.ext3 $2;; + ext2) mkfs.ext2 $2;; + xfs) mkfs.xfs -f $2;; + jfs) mkfs.jfs -f $2;; + esac + echo "" + pressanykey +} + +mountparts(){ + learn mountparts + clear + echo "Mounting to /mnt ..." + echo "-----------------" + echo "mount $rootdev /mnt" + mount $rootdev /mnt + mkdir /mnt/{boot,home} + if [ ! "$bootdev" = "" ]; then + echo "mount $bootdev /mnt/boot" + mount $bootdev /mnt/boot + fi + if [ ! "$swapdev" = "" ]; then + echo "swapon $swapdev" + swapon $swapdev + fi + if [ ! "$homedev" = "" ]; then + echo "mount $homedev /mnt/home" + mount $homedev /mnt/home + fi + pressanykey + installmenu +} +# -------------------------------------------------------- + + + +# -------------------------------------------------------- +installmenu(){ + if [ "$1" = "" ]; then + nextitem="$txtinstallarchlinux" + else + nextitem=$1 + fi + options=() + options+=("$txteditmirrorlist" "($txtoptional)") + options+=("$txtinstallarchlinux" "pacstrap base") + options+=("$txtconfigarchlinux" "") + sel=$(whiptail --backtitle "$apptitle" --title "$txtinstallmenu" --menu "" --cancel-button "Unmount" --default-item "$nextitem" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + case $sel in + "$txteditmirrorlist") + nano /etc/pacman.d/mirrorlist + nextitem="$txtinstallarchlinux" + ;; + "$txtinstallarchlinux") + installbase + nextitem="$txtconfigarchlinux" + ;; + "$txtconfigarchlinux") + archmenu + nextitem="$txtconfigarchlinux" + ;; + esac + installmenu "$nextitem" + else + unmountdevices + fi +} + +installbase(){ + learn installbase + clear + pacstrap /mnt base +} + +unmountdevices(){ + learn unmountdevices + clear + echo "umount -R /mnt" + umount -R /mnt + if [ ! "$swapdev" = "" ]; then + echo "swapoff $swapdev" + swapoff $swapdev + fi + pressanykey +} +# -------------------------------------------------------- + + + +# -------------------------------------------------------- +archmenu(){ + if [ "$1" = "" ]; then + nextitem="." + else + nextitem=$1 + fi + options=() + options+=("$txtsethostname" "/etc/hostname") + options+=("$txtsetkeymap" "/etc/vconsole.conf") + options+=("$txtsetlocale" "/etc/locale.conf, /etc/locale.gen") + options+=("$txtsettime" "/etc/localtime") + options+=("$txtsetrootpassword" "") + options+=("${txtgenerate//%1/fstab}" "") + options+=("${txtedit//%1/fstab}" "($txtoptional)") + options+=("${txtedit//%1/mkinitcpio.conf}" "($txtoptional)") + options+=("${txtedit//%1/mirrorlist}" "($txtoptional)") + options+=("${txtinstall//%1/grub}" "pacstrap grub (os-prober), grub-mkconfig") + options+=("${txtedit//%1/grub}" "($txtoptional)") + options+=("${txtinstall//%1/bootloader}" "grub-install") + options+=("${txtenable//%1/dhcpcd}" "systemctl enable dhcpd") + options+=("archdi" "$txtarchdidesc") + sel=$(whiptail --backtitle "$apptitle" --title "$txtarchinstallmenu" --menu "" --cancel-button "Back" --default-item "$nextitem" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + case $sel in + "$txtsethostname") + archsethostname + nextitem="$txtsetkeymap" + ;; + "$txtsetkeymap") + archsetkeymap + nextitem="$txtsetlocale" + ;; + "$txtsetlocale") + archsetlocale + nextitem="$txtsettime" + ;; + "$txtsettime") + archsettime + nextitem="$txtsetrootpassword" + ;; + "$txtsetrootpassword") + archsetrootpassword + nextitem="${txtgenerate//%1/fstab}" + ;; + "${txtgenerate//%1/fstab}") + archgenfstab + nextitem="${txtinstall//%1/grub}" + ;; + "${txtedit//%1/fstab}") + nano /mnt/etc/fstab + nextitem="${txtedit//%1/fstab}" + ;; + "${txtedit//%1/mkinitcpio.conf}") + archeditmkinitcpio + nextitem="${txtedit//%1/mkinitcpio.conf}" + ;; + "${txtedit//%1/mirrorlist}") + nano /mnt/etc/pacman.d/mirrorlist + nextitem="${txtedit//%1/mirrorlist}" + ;; + "${txtinstall//%1/grub}") + archinstallgrub + nextitem="${txtinstall//%1/bootloader}" + ;; + "${txtedit//%1/grub}") + nano /mnt/etc/default/grub + if (whiptail --backtitle "$apptitle" --title "${txtedit//%1/grub}" --yesno "$txtrungrubmakeconfig" 0 0) then + clear + archchroot installgrub + pressanykey + fi + nextitem="${txtinstall//%1/bootloader}" + ;; + "${txtinstall//%1/bootloader}") + archinstallbootloader + nextitem="${txtenable//%1/dhcpcd}" + ;; + "${txtenable//%1/dhcpcd}") + archenabledhcpcd + nextitem="archdi" + ;; + "archdi") + installarchdi + nextitem="archdi" + ;; + esac + archmenu "$nextitem" + fi +} + +archchroot(){ + cp $0 /mnt/root + chmod 755 /mnt/root/$(basename "$0") + if [ "$learning" = "1" ]; then + arch-chroot /mnt /root/$(basename "$0") --chroot $1 $2 --learning + else + arch-chroot /mnt /root/$(basename "$0") --chroot $1 $2 + fi + rm /mnt/root/$(basename "$0") +} + + +archsethostname(){ + learn archsethostname + hostname=$(whiptail --backtitle "$apptitle" --title "$txtsethostname" --inputbox "" 0 0 "localhost" 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + echo "$hostname" > /mnt/etc/hostname + fi +} + +archsetkeymap(){ + learn archsetkeymap + items=$(localectl list-keymaps) + options=() + for item in $items; do + options+=("$item" "") + done + keymap=$(whiptail --backtitle "$apptitle" --title "$txtsetkeymap" --menu "" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + echo "KEYMAP=$keymap" > /mnt/etc/vconsole.conf + #echo "FONT=lat9w-16" >> /mnt/etc/vconsole.conf + fi +} + +archsetlocale(){ + learn archsetlocale + items=$(ls /usr/share/i18n/locales) + options=() + for item in $items; do + options+=("$item" "") + done + locale=$(whiptail --backtitle "$apptitle" --title "$txtsetlocale" --menu "" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + clear + echo "LANG=$locale.UTF-8" > /mnt/etc/locale.conf + echo "LC_COLLATE=C" >> /mnt/etc/locale.conf + sed -i '/'$locale'.UTF-8/s/^#//g' /mnt/etc/locale.gen + archchroot setlocale + fi +} +archsetlocalechroot(){ + locale-gen + exit +} + +archsettime(){ + learn archsettime + items=$(ls -l /mnt/usr/share/zoneinfo/ | grep '^d' | awk '{ print $9 }') + options=() + for item in $items; do + options+=("$item" "") + done + + timezone=$(whiptail --backtitle "$apptitle" --title "$txtsettime" --menu "" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ ! "$?" = "0" ]; then + return 1 + fi + + + items=$(ls /mnt/usr/share/zoneinfo/$timezone/) + options=() + for item in $items; do + options+=("$item" "") + done + + timezone=$timezone/$(whiptail --backtitle "$apptitle" --title "$txtsettime" --menu "" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ ! "$?" = "0" ]; then + return 1 + fi + + ln -sf /usr/share/zoneinfo/$timezone /mnt/etc/localtime + + if (whiptail --backtitle "$apptitle" --title "$txtsettime" --yesno "$txtuseutcclock" 0 0) then + clear + archchroot settimeutc + else + clear + archchroot settimelocal + fi + +} +archsettimeutcchroot(){ + hwclock --systohc --utc + exit +} +archsettimelocalchroot(){ + hwclock --systohc --localtime + exit +} + +archsetrootpassword(){ + learn archsetrootpassword + clear + echo "$txtsetrootpassword :" + echo "" + archchroot setrootpassword + pressanykey +} +archsetrootpasswordchroot(){ + passwd root + exit +} + +archgenfstab(){ + learn archgenfstab + clear + genfstab -U -p /mnt >> /mnt/etc/fstab +} + +archeditmkinitcpio(){ + nano /mnt/etc/mkinitcpio.conf + if (whiptail --backtitle "$apptitle" --title "${txtedit//%1/mkinitcpio.conf}" --yesno "${txtgenerate//%1/mkinitcpio} ?" 0 0) then + clear + archchroot genmkinitcpio + pressanykey + fi +} +archgenmkinitcpiochroot(){ + mkinitcpio -p linux + exit +} + +archinstallgrub(){ + learn archinstallgrub + clear + pacstrap /mnt grub + + if (whiptail --backtitle "$apptitle" --title "${txtinstall//%1/grub}" --yesno "$txtinstallosprober" --defaultno 0 0) then + clear + pacstrap /mnt os-prober + fi + + if [ "$efimode" = "1" ]||[ "$efimode" = "2" ]; then + if (whiptail --backtitle "$apptitle" --title "${txtinstall//%1/efibootmgr}" --yesno "$txtefibootmgr" 0 0) then + clear + pacstrap /mnt efibootmgr + fi + else + if (whiptail --backtitle "$apptitle" --title "${txtinstall//%1/efibootmgr}" --yesno "$txtefibootmgr" --defaultno 0 0) then + clear + pacstrap /mnt efibootmgr + fi + fi + + clear + archchroot installgrub +} +archinstallgrubchroot(){ + grub-mkconfig -o /boot/grub/grub.cfg + exit +} + +archinstallbootloader(){ + learn archinstallbootloader + + items=$(lsblk -d -p -n -l -o NAME -e 7,11) + options=() + for item in $items; do + options+=("$item" "") + done + device=$(whiptail --backtitle "$apptitle" --title "${txtinstall//%1/bootloader}" --menu "" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + options=() + if [ "$efimode" = "1" ]; then + options+=("EFI" "") + options+=("BIOS" "") + options+=("BIOS+EFI" "") + elif [ "$efimode" = "2" ]; then + options+=("BIOS+EFI" "") + options+=("BIOS" "") + options+=("EFI" "") + else + options+=("BIOS" "") + options+=("EFI" "") + options+=("BIOS+EFI" "") + fi + sel=$(whiptail --backtitle "$apptitle" --title "${txtinstall//%1/bootloader}" --menu "" --cancel-button "Back" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + clear + case $sel in + "BIOS") archchroot installbootloader $device;; + "EFI") archchroot installbootloaderefi $device;; + "BIOS+EFI") archchroot installbootloaderefiusb $device;; + esac + pressanykey + fi + fi +} +archinstallbootloaderchroot(){ + if [ ! "$1" = "none" ]; then + grub-install --target=i386-pc --recheck $1 + fi + exit +} +archinstallbootloaderefichroot(){ + if [ ! "$1" = "none" ]; then + grub-install --target=x86_64-efi --efi-directory=/boot --recheck $1 + fi + exit +} +archinstallbootloaderefiusbchroot(){ + if [ ! "$1" = "none" ]; then + grub-install --target=i386-pc --recheck $1 + grub-install --target=x86_64-efi --efi-directory=/boot --removable --recheck $1 + fi + exit +} + +archenabledhcpcd(){ + learn archenabledhcpcd + if (whiptail --backtitle "$apptitle" --title "${txtenable//%1/dhcpcd}" --yesno "${txtenable//%1/dhcpcd} ?" 0 0) then + clear + archchroot enabledhcpcd + fi +} +archenabledhcpcdchroot(){ + systemctl enable dhcpcd + exit +} + +installarchdi(){ + if(whiptail --backtitle "$apptitle" --title "archdi" --yesno "$txtinstallarchdi" 0 0) then + clear + pacstrap /mnt wget libnewt + fi + if [ "$?" = "0" ]; then + options=() + options+=("$txtarchdiinstallandlaunch" "") + options+=("$txtarchdilaunch" "") + options+=("$txtarchdiinstall" "") + sel=$(whiptail --backtitle "$apptitle" --title "$txtarchdimenu" --menu "" --cancel-button "Back" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + case $sel in + "$txtarchdiinstallandlaunch") archchroot archdiinstallandlaunch;; + "$txtarchdilaunch") archchroot archdilaunch;; + "$txtarchdiinstall") archchroot archdiinstall;; + esac + fi + fi +} +archdiinstallandlaunchchroot(){ + cd + curl -L archdi.sourceforge.net/archdi >archdi + sh archdi -i + archdi --chroot + exit +} +archdilaunchchroot(){ + cd + curl -L archdi.sourceforge.net/archdi >archdi + sh archdi --chroot + rm archdi + exit +} +archdiinstallchroot(){ + cd + curl -L archdi.sourceforge.net/archdi >archdi + sh archdi -i + exit +} +# -------------------------------------------------------- + + + +# -------------------------------------------------------- +pressanykey(){ + read -n1 -p "$txtpressanykey" +} + +loadstrings(){ + txtmainmenu="Main Menu" + txtlanguage="Language" + txtsetkeymap="Set Keyboard Layout" + txtdiskpartmenu="Disk Partitions" + txtselectpartsmenu="Select Partitions and Install" + txthelp="Help" + txtchangelog="Changelog" + txtreboot="Reboot" + + txtautoparts="Auto Partitions" + txteditparts="Edit Partitions" + + txtautopartsconfirm="Selected device : %1\n\nAll data will be erased ! \n\nContinue ?" + + txtautopartclear="Clear all partition data" + txtautopartcreate="Create %1 partition" + txthybridpartcreate="Set hybrid MBR" + txtautopartsettype="Set %1 partition type" + + txtselectdevice="Select %1 device :" + txtselecteddevices="Selected devices :" + + txtformatmountmenu="Format and Mount" + txtformatdevices="Format Devices" + txtformatdevice="Format Device" + txtmount="Mount" + txtmountdesc="Install or Config" + + txtformatdeviceconfirm="Warning, all data on selected devices will be erased ! \nFormat devices ?" + + txtselectpartformat="Select partition format for %1 :" + txtformatingpart="Formatting partition %1 as" + + txtinstallmenu="Install Menu" + + txtarchinstallmenu="Arch Install Menu" + txtrungrubmakeconfig="Run grub-mkconfig ?" + + txteditmirrorlist="Edit mirrorlist" + txtinstallarchlinux="Install Arch Linux" + txtconfigarchlinux="Config Arch Linux" + + txtsethostname="Set Computer Name" + txtsetlocale="Set Locale" + txtsettime="Set Time" + txtsetrootpassword="Set root password" + + txtuseutcclock="Use UTC hardware clock ?" + + txtoptional="Optional" + txtrecommandeasyinst="Recommanded for easy install" + txtset="Set %1" + txtgenerate="Generate %1" + txtedit="Edit %1" + txtinstall="Install %1" + txtenable="Enable %1" + + + txtpressanykey="Press any key to continue." + + txtinstallosprober="os-prober is a good solution if you want to use mutli-boot.\nInstall os-prober ?" + txtefibootmgr="efibootmgr is required for efi computer." + + txtarchdidesc="Full desktop install script" + txtinstallarchdi="Arch Linux Desktop Install (archdi) is a second script who can help you to install a full workstation.\n\nYou can just launch the script or install it. Choose in the next menu.\n\nArch Linux Desktop Install as two dependencies : wget and libnewt.\n\npacstrap wget libnewt ?" + txtarchdiinstallandlaunch="Install and run archdi" + txtarchdiinstall="Install archdi" + txtarchdilaunch="Launch archdi" + + if [ "$learning" = "1" ]; then + eval $(curl -L $baseurl/learn/English | sed '/^#/ d') + fi +} + +learn(){ + if [ "$learning" = "1" ]; then + clear + eval 'echo -e ""${learn'"$1}""" + echo "" + pressanykey + fi +} +# -------------------------------------------------------- + + + +# -------------------------------------------------------- +while (( "$#" )); do + case $1 in + -h|--help) help + exit 0;; + -l|--learning) learning=1;; + --chroot) chroot=1 + command=$2 + args=$3;; + esac + shift +done + +if [ "$chroot" = "1" ]; then + case $command in + 'setrootpassword') archsetrootpasswordchroot;; + 'setlocale') archsetlocalechroot;; + 'settimeutc') archsettimeutcchroot;; + 'settimelocal') archsettimelocalchroot;; + 'genmkinitcpio') archgenmkinitcpiochroot;; + 'enabledhcpcd') archenabledhcpcdchroot;; + 'installgrub') archinstallgrubchroot;; + 'installbootloader') archinstallbootloaderchroot $args;; + 'installbootloaderefi') archinstallbootloaderefichroot $args;; + 'installbootloaderefiusb') archinstallbootloaderefiusbchroot $args;; + 'archdiinstallandlaunch') archdiinstallandlaunchchroot;; + 'archdiinstall') archdiinstallchroot;; + 'archdilaunch') archdilaunchchroot;; + esac +else + pacman -S --needed arch-install-scripts wget libnewt + dmesg |grep efi: > /dev/null + if [ "$?" == "1" ]; then + eficomputer=0 + else + eficomputer=1 + efimode=1 + fi + loadstrings + mainmenu +fi + +exit 0 +# -------------------------------------------------------- |