From 4b49c60ec8ae0cfade42ea544461dff0085b229b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs?= Date: Sat, 25 Apr 2020 19:58:29 -0500 Subject: [PATCH] Rebrand --- README.md | 20 +- archfi | 2026 ------------------------------------- hyperfi | 1922 +++++++++++++++++++++++++++++++++++ makerelease | 111 -- samples/custompackagelist | 2 +- 5 files changed, 1929 insertions(+), 2152 deletions(-) delete mode 100644 archfi create mode 100644 hyperfi delete mode 100755 makerelease diff --git a/README.md b/README.md index 67ec1cd..eda92b0 100644 --- a/README.md +++ b/README.md @@ -1,28 +1,20 @@ # archfi -Just a simple bash script wizard to install Arch Linux after you have booted on the official Arch Linux install media. +Just a simple bash script wizard to install Hyperbola after you have booted on the official Hyperbola install media. -With this script, you can install Arch Linux with two simple terminal commands. +With this script, you can install Hyperbola with two simple terminal commands. This wizard is made to install minimum packages (Base, bootloader and optionally archdi). -At the end of this wizard, you can install or launch [archdi](https://github.com/MatMoul/archdi) (Arch Linux Desktop Install) to install and configure desktop packages. - -You can watch my videos to see how to use it [here](https://www.youtube.com/playlist?list=PLytHgIKLV1caHlCrcTSkm5OF2WSVI1_Sq). - ## How to use -First, boot with the [last Arch Linux image](https://www.archlinux.org/download/) with a [bootable device](https://wiki.archlinux.org/index.php/USB_flash_installation_media). +First, boot with the [last Hyperbola image](https://www.hyperbola.info/download/) with a [bootable device](https://wiki.hyperbola.info/doku.php?id=en:guide:beginners). -Then make sure you have Internet connection on the Arch iso. If you have a wireless connection the `wifi-menu` command might be useful to you. You can also read the [Network configuration](https://wiki.archlinux.org/index.php/Network_configuration) from the Arch Linux guide for more detailed instructions. +Then make sure you have Internet connection on the HyperISO. If you have a wireless connection the `wifi-menu` command might be useful to you. You can also read the [Network configuration](https://wiki.archlinux.org/index.php/Network_configuration) from the Hyperbola guide for more detailed instructions. Then download the script with from the command line: - wget archfi.sf.net/archfi - -If SourceForge is down, use this instead: - - wget matmoul.github.io/archfi + wget tinyurl.com/hyperfi Finally, launch the script: @@ -42,7 +34,7 @@ You can find a sample custom package list file in the samples folder. You can test your script with this command : - sh archfi -t {githubusername} {branchname} + sh archfi -t {codebergusername} {branchname} Example : diff --git a/archfi b/archfi deleted file mode 100644 index c0b628b..0000000 --- a/archfi +++ /dev/null @@ -1,2026 +0,0 @@ -#!/bin/bash - -# Arch Linux Fast Install (archfi) -# -------------------------------- -# author : MatMoul -# https://github.com/MatMoul -# http://sourceforge.net/u/matmoul -# project : https://github.com/MatMoul/archfi -# http://sourceforge.net/projects/archfi/ -# license : LGPL-3.0 (http://opensource.org/licenses/lgpl-3.0.html) -# -# referance : https://wiki.archlinux.org/index.php/Installation_guide - - -apptitle="Arch Linux Fast Install (archfi) - Version: 2020.04.08.04.48.28 (GPLv3)" -baseurl=https://raw.githubusercontent.com/MatMoul/archfi/master -cpl=0 -skipfont="0" -fspkgs="" - - -# -------------------------------------------------------- -mainmenu(){ - if [ "${1}" = "" ]; then - nextitem="." - else - nextitem=${1} - fi - options=() - options+=("${txtlanguage}" "Language") - options+=("${txtsetkeymap}" "(loadkeys ...)") - options+=("${txteditor}" "(${txtoptional})") - options+=("${txtdiskpartmenu}" "") - options+=("${txtselectpartsmenu}" "") - options+=("" "") - options+=("${txtreboot}" "") - sel=$(whiptail --backtitle "${apptitle}" --title "${txtmainmenu}" --menu "" --cancel-button "${txtexit}" --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}" - ;; - "${txteditor}") - chooseeditor - 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+=("Arabic" "(By Mohammad Alawadi)") - options+=("Brazilian" "(By MaxWilliamJF)") - options+=("Dutch" "(By bowero)") - options+=("English" "(By MatMoul)") - options+=("French" "(By MatMoul)") - options+=("German" "(By untergrundbiber)") - options+=("Greek" "(By quelotic)") - options+=("Italian" "(By thegoldgoat)") - options+=("Hungarian" "(By KardiWeb)") - options+=("Norwegian" "(By mrboen94)") - options+=("Polish" "(By dawidd6)") - options+=("Portuguese" "(By hugok)") - options+=("Russian" "(By Anonymous_Prodject)") - options+=("Spanish" "(By Mystogab)") - options+=("Turkish" "(By c0b41)") - 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') - fi - if [ "${skipfont}" = "0" ]; then - eval $(setfont ${font}) - fi - font= - if [ "$(cat /etc/locale.gen | grep ""#${locale}"")" != "" ]; then - sed -i "/#${locale}/s/^#//g" /etc/locale.gen - locale-gen - fi - export LANG=${locale} - fi -} - -setkeymap(){ - #items=$(localectl list-keymaps) - #options=() - #for item in ${items}; do - # options+=("${item}" "") - #done - items=$(find /usr/share/kbd/keymaps/ -type f -printf "%f\n" | sort -V) - 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 - echo "loadkeys ${keymap}" - loadkeys ${keymap} - pressanykey - fi -} - -chooseeditor(){ - options=() - options+=("nano" "") - options+=("vim" "") - options+=("vi" "") - options+=("edit" "") - sel=$(whiptail --backtitle "${apptitle}" --title "${txteditor}" --menu "" 0 0 0 \ - "${options[@]}" \ - 3>&1 1>&2 2>&3) - if [ "$?" = "0" ]; then - clear - echo "export EDITOR=${sel}" - export EDITOR=${sel} - EDITOR=${sel} - pressanykey - fi -} - -rebootpc(){ - if (whiptail --backtitle "${apptitle}" --title "${txtreboot}" --yesno "${txtreboot} ?" --defaultno 0 0) then - clear - reboot - fi -} -# -------------------------------------------------------- - - - -# -------------------------------------------------------- -selectdisk(){ - items=$(lsblk -d -p -n -l -o NAME,SIZE -e 7,11) - options=() - IFS_ORIG=$IFS - IFS=$'\n' - for item in ${items} - do - options+=("${item}" "") - done - IFS=$IFS_ORIG - result=$(whiptail --backtitle "${APPTITLE}" --title "${1}" --menu "" 0 0 0 "${options[@]}" 3>&1 1>&2 2>&3) - if [ "$?" != "0" ] - then - return 1 - fi - echo ${result%%\ *} - return 0 -} - -diskpartmenu(){ - if [ "${1}" = "" ]; then - nextitem="." - else - nextitem=${1} - fi - options=() - if [ "${eficomputer}" == "0" ]; then - options+=("${txtautoparts} (gpt)" "") - options+=("${txtautoparts} (dos)" "") - 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 "${txtback}" --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(){ - device=$(selectdisk "${txtautoparts} (dos)") - 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 - if [ "${device::8}" == "/dev/nvm" ]; then - bootdev=${device}"p1" - swapdev=${device}"p2" - rootdev=${device}"p3" - else - bootdev=${device}"1" - swapdev=${device}"2" - rootdev=${device}"3" - fi - efimode="0" - fi - fi -} - -diskpartautogpt(){ - device=$(selectdisk "${txtautoparts} (gpt)") - 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 - if [ "${device::8}" == "/dev/nvm" ]; then - bootdev=${device}"p2" - swapdev=${device}"p3" - rootdev=${device}"p4" - else - bootdev=${device}"2" - swapdev=${device}"3" - rootdev=${device}"4" - fi - efimode="0" - fi - fi -} - -diskpartautoefi(){ - device=$(selectdisk "${txtautoparts} (gpt,efi)") - 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 - if [ "${device::8}" == "/dev/nvm" ]; then - bootdev=${device}"p1" - swapdev=${device}"p3" - rootdev=${device}"p4" - else - bootdev=${device}"1" - swapdev=${device}"3" - rootdev=${device}"4" - fi - efimode="1" - fi - fi -} - -diskpartautoefiusb(){ - device=$(selectdisk "${txtautoparts} (gpt,efi)") - 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 - if [ "${device::8}" == "/dev/nvm" ]; then - bootdev=${device}"p1" - swapdev= - rootdev=${device}"p4" - else - bootdev=${device}"1" - swapdev= - rootdev=${device}"4" - fi - efimode="2" - fi - fi -} - -diskpartcfdisk(){ - device=$( selectdisk "${txteditparts} (cfdisk)" ) - if [ "$?" = "0" ]; then - clear - cfdisk ${device} - fi -} - -diskpartcgdisk(){ - device=$( selectdisk "${txteditparts} (cgdisk)" ) - if [ "$?" = "0" ]; then - clear - cgdisk ${device} - fi -} -# -------------------------------------------------------- - - - -# -------------------------------------------------------- -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 - realrootdev=${rootdev} - - 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 - isnvme=0 - if [ "${bootdev::8}" == "/dev/nvm" ]; then - isnvme=1 - fi - if [ "${rootdev::8}" == "/dev/nvm" ]; then - isnvme=1 - fi - 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 "${txtback}" --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 - fspkgs="" - if [ ! "${bootdev}" = "" ]; then - formatbootdevice boot ${bootdev} - fi - if [ ! "${swapdev}" = "" ]; then - formatswapdevice swap ${swapdev} - fi - formatdevice root ${rootdev} - if [ ! "${homedev}" = "" ]; then - formatdevice home ${homedev} - fi - fi -} -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) - echo "mkfs.ext2 ${2}" - mkfs.ext2 ${2} - ;; - ext3) - echo "mkfs.ext3 ${2}" - mkfs.ext3 ${2} - ;; - ext4) - echo "mkfs.ext4 ${2}" - mkfs.ext4 ${2} - ;; - fat32) - fspkgs="${fspkgs[@]} dosfstools" - echo "mkfs.fat ${2}" - mkfs.fat ${2} - ;; - esac - echo "" - pressanykey -} -formatswapdevice(){ - options=() - options+=("swap" "") - 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/${swapdev}} swap" - echo "----------------------------------------------------" - case ${sel} in - swap) - echo "mkswap ${swapdev}" - mkswap ${swapdev} - echo "" - pressanykey - ;; - esac - clear -} -formatdevice(){ - options=() - options+=("btrfs" "") - options+=("ext4" "") - options+=("ext3" "") - options+=("ext2" "") - options+=("xfs" "") - options+=("f2fs" "") - options+=("jfs" "") - options+=("reiserfs" "") - if [ ! "${3}" = "noluks" ]; then - options+=("luks" "encrypted") - 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 - btrfs) - fspkgs="${fspkgs[@]} btrfs-progs" - echo "mkfs.btrfs -f ${2}" - mkfs.btrfs -f ${2} - if [ "${1}" = "root" ]; then - echo "mount ${2} /mnt" - echo "btrfs subvolume create /mnt/root" - echo "btrfs subvolume set-default /mnt/root" - echo "umount /mnt" - mount ${2} /mnt - btrfs subvolume create /mnt/root - btrfs subvolume set-default /mnt/root - umount /mnt - fi - ;; - ext4) - echo "mkfs.ext4 ${2}" - mkfs.ext4 ${2} - ;; - ext3) - echo "mkfs.ext3 ${2}" - mkfs.ext3 ${2} - ;; - ext2) - echo "mkfs.ext2 ${2}" - mkfs.ext2 ${2} - ;; - xfs) - fspkgs="${fspkgs[@]} xfsprogs" - echo "mkfs.xfs -f ${2}" - mkfs.xfs -f ${2} - ;; - f2fs) - fspkgs="${fspkgs[@]} f2fs-tools" - echo "mkfs.f2fs $2" - mkfs.f2fs $2 - ;; - jfs) - fspkgs="${fspkgs[@]} jfsutils" - echo "mkfs.xfs -f ${2}" - mkfs.jfs -f ${2} - ;; - reiserfs) - fspkgs="${fspkgs[@]} reiserfsprogs" - echo "mkfs.reiserfs -f ${2}" - mkfs.reiserfs -f ${2} - ;; - luks) - echo "${txtcreateluksdevice}" - echo "cryptsetup luksFormat ${2}" - cryptsetup luksFormat ${2} - if [ ! "$?" = "0" ]; then - pressanykey - return 1 - fi - pressanykey - echo "" - echo "${txtopenluksdevice}" - echo "cryptsetup luksOpen ${2} ${1}" - cryptsetup luksOpen ${2} ${1} - if [ ! "$?" = "0" ]; then - pressanykey - return 1 - fi - pressanykey - options=() - options+=("normal" "") - options+=("fast" "") - sel=$(whiptail --backtitle "${apptitle}" --title "${txtformatdevice}" --menu "Wipe device ?" --cancel-button="${txtignore}" 0 0 0 \ - "${options[@]}" \ - 3>&1 1>&2 2>&3) - if [ "$?" = "0" ]; then - case ${sel} in - normal) - echo "dd if=/dev/zero of=/dev/mapper/${1}" - dd if=/dev/zero of=/dev/mapper/${1} & PID=$! &>/dev/null - ;; - fast) - echo "dd if=/dev/zero of=/dev/mapper/${1} bs=60M" - dd if=/dev/zero of=/dev/mapper/${1} bs=60M & PID=$! &>/dev/null - ;; - esac - clear - sleep 1 - while kill -USR1 ${PID} &>/dev/null - do - sleep 1 - done - fi - echo "" - pressanykey - formatdevice ${1} /dev/mapper/${1} noluks - if [ "${1}" = "root" ]; then - realrootdev=${rootdev} - rootdev=/dev/mapper/${1} - luksroot=1 - luksrootuuid=$(cryptsetup luksUUID ${2}) - else - case ${1} in - home) homedev=/dev/mapper/${1} ;; - esac - luksdrive=1 - crypttab="\n${1} UUID=$(cryptsetup luksUUID ${2}) none" - fi - echo "" - echo "${txtluksdevicecreated}" - ;; - esac - echo "" - pressanykey -} - -mountparts(){ - clear - echo "mount ${rootdev} /mnt" - mount ${rootdev} /mnt - echo "mkdir /mnt/{boot,home}" - mkdir /mnt/{boot,home} 2>/dev/null - 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+=("${txtselectmirrorsbycountry}" "(${txtoptional})") - options+=("${txteditmirrorlist}" "(${txtoptional})") - options+=("${txtinstallarchlinux}" "pacstrap") - options+=("${txtconfigarchlinux}" "") - sel=$(whiptail --backtitle "${apptitle}" --title "${txtinstallmenu}" --menu "" --cancel-button "${txtunmount}" --default-item "${nextitem}" 0 0 0 \ - "${options[@]}" \ - 3>&1 1>&2 2>&3) - if [ "$?" = "0" ]; then - case ${sel} in - "${txtselectmirrorsbycountry}") - selectmirrorsbycountry - nextitem="${txtinstallarchlinux}" - ;; - "${txteditmirrorlist}") - ${EDITOR} /etc/pacman.d/mirrorlist - nextitem="${txtinstallarchlinux}" - ;; - "${txtinstallarchlinux}") - if(installbase) then - nextitem="${txtconfigarchlinux}" - fi - ;; - "${txtconfigarchlinux}") - archmenu - nextitem="${txtconfigarchlinux}" - ;; - esac - installmenu "${nextitem}" - else - unmountdevices - fi -} - -selectmirrorsbycountry() { - if [[ ! -f /etc/pacman.d/mirrorlist.backup ]]; then - cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.backup - fi - items=$( sed -n "/^##.*/N; {s/^## \(.*\)\nServer.*/\1/p}" < /etc/pacman.d/mirrorlist.backup | sort -u ) - options=() - IFS_ORIG=$IFS - IFS=$'\n' - for item in ${items}; do - options+=("${item}" "") - done - IFS=$IFS_ORIG - country=$(whiptail --backtitle "${APPTITLE}" --title "${txtselectcountry}" --menu "" 0 0 0 "${options[@]}" 3>&1 1>&2 2>&3) - if [ "$?" != "0" ]; then - return 1 - fi - sed "s/^\(Server .*\)/\#\1/;/^## $country/N; {s/^\(## .*\n\)\#Server \(.*\)/\1Server \2/}" < /etc/pacman.d/mirrorlist.backup > /etc/pacman.d/mirrorlist -} - -installbase(){ - pkgs="base" - options=() - options+=("linux" "") - options+=("linux-lts" "") - options+=("linux-zen" "") - options+=("linux-hardened" "") - sel=$(whiptail --backtitle "${apptitle}" --title "${txtinstallarchlinuxkernel}" --menu "" 0 0 0 \ - "${options[@]}" \ - 3>&1 1>&2 2>&3) - if [ "$?" = "0" ]; then - pkgs+=" ${sel}" - else - return 1 - fi - - options=() - options+=("linux-firmware" "(${txtoptional})" on) - sel=$(whiptail --backtitle "${apptitle}" --title "${txtinstallarchlinuxfirmwares}" --checklist "" 0 0 0 \ - "${options[@]}" \ - 3>&1 1>&2 2>&3) - if [ ! "$?" = "0" ]; then - return 1 - fi - for itm in $sel; do - pkgs="$pkgs $(echo $itm | sed 's/"//g')" - done - - options=() - if [[ "${fspkgs}" == *"dosfstools"* ]]; then - options+=("dosfstools" "" on) - else - options+=("dosfstools" "" off) - fi - if [[ "${fspkgs}" == *"btrfs-progs"* ]]; then - options+=("btrfs-progs" "" on) - else - options+=("btrfs-progs" "" off) - fi - if [[ "${fspkgs}" == *"xfsprogs"* ]]; then - options+=("xfsprogs" "" on) - else - options+=("xfsprogs" "" off) - fi - if [[ "${fspkgs}" == *"f2fs-tools"* ]]; then - options+=("f2fs-tools" "" on) - else - options+=("f2fs-tools" "" off) - fi - if [[ "${fspkgs}" == *"jfsutils"* ]]; then - options+=("jfsutils" "" on) - else - options+=("jfsutils" "" off) - fi - if [[ "${fspkgs}" == *"reiserfsprogs"* ]]; then - options+=("reiserfsprogs" "" on) - else - options+=("reiserfsprogs" "" off) - fi - options+=("lvm2" "" off) - options+=("dmraid" "" off) - sel=$(whiptail --backtitle "${apptitle}" --title "${txtinstallarchlinuxfilesystems}" --checklist "" 0 0 0 \ - "${options[@]}" \ - 3>&1 1>&2 2>&3) - if [ ! "$?" = "0" ]; then - return 1 - fi - for itm in $sel; do - pkgs="$pkgs $(echo $itm | sed 's/"//g')" - done - - if [[ ${cpl} == 1 ]]; then - sed -i '/^\s*$/d' /tmp/archfi-custom-package-list - sed -i '/^#/ d' /tmp/archfi-custom-package-list - options=() - while read pkg; do - options+=("${pkg}" "" on) - done < /tmp/archfi-custom-package-list - sel=$(whiptail --backtitle "${apptitle}" --title "${txtinstallarchlinuxcustompackagelist}" --checklist "" 0 0 0 \ - "${options[@]}" \ - 3>&1 1>&2 2>&3) - if [ ! "$?" = "0" ]; then - return 1 - fi - for itm in $sel; do - pkgs="$pkgs $(echo $itm | sed 's/"//g')" - done - fi - - clear - echo "pacstrap /mnt ${pkgs}" - pacstrap /mnt ${pkgs} - pressanykey -} - -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+=("${txtsetfont}" "/etc/vconsole.conf (${txtoptional})") - options+=("${txtsetlocale}" "/etc/locale.conf, /etc/locale.gen") - options+=("${txtsettime}" "/etc/localtime") - options+=("${txtsetrootpassword}" "") - options+=("${txtgenerate//%1/fstab}" "") - if [ "${luksdrive}" = "1" ]; then - options+=("${txtgenerate//%1/crypttab}" "") - fi - if [ "${luksroot}" = "1" ]; then - options+=("${txtgenerate//%1/mkinitcpio.conf-luks}" "(encrypt hooks)") - fi - if [ "${isnvme}" = "1" ]; then - options+=("${txtgenerate//%1/mkinitcpio.conf-nvme}" "(nvme module)") - fi - options+=("${txtedit//%1/fstab}" "(${txtoptional})") - options+=("${txtedit//%1/crypttab}" "(${txtoptional})") - options+=("${txtedit//%1/mkinitcpio.conf}" "(${txtoptional})") - options+=("${txtedit//%1/mirrorlist}" "(${txtoptional})") - options+=("${txtbootloader}" "") - options+=("${txtextrasmenu}" "") - options+=("archdi" "${txtarchdidesc}") - sel=$(whiptail --backtitle "${apptitle}" --title "${txtarchinstallmenu}" --menu "" --cancel-button "${txtback}" --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}" - ;; - "${txtsetfont}") - archsetfont - nextitem="${txtsetlocale}" - ;; - "${txtsetlocale}") - archsetlocale - nextitem="${txtsettime}" - ;; - "${txtsettime}") - archsettime - nextitem="${txtsetrootpassword}" - ;; - "${txtsetrootpassword}") - archsetrootpassword - nextitem="${txtgenerate//%1/fstab}" - ;; - "${txtgenerate//%1/fstab}") - archgenfstabmenu - if [ "${luksdrive}" = "1" ]; then - nextitem="${txtgenerate//%1/crypttab}" - else - if [ "${luksroot}" = "1" ]; then - nextitem="${txtgenerate//%1/mkinitcpio.conf-luks}" - else - if [ "${isnvme}" = "1" ]; then - nextitem="${txtgenerate//%1/mkinitcpio.conf-nvme}" - else - nextitem="${txtbootloader}" - fi - fi - fi - ;; - "${txtgenerate//%1/crypttab}") - archgencrypttab - if [ "${luksroot}" = "1" ]; then - nextitem="${txtgenerate//%1/mkinitcpio.conf-luks}" - else - if [ "${isnvme}" = "1" ]; then - nextitem="${txtgenerate//%1/mkinitcpio.conf-nvme}" - else - nextitem="${txtbootloader}" - fi - fi - ;; - "${txtgenerate//%1/mkinitcpio.conf-luks}") - archgenmkinitcpioluks - if [ "${isnvme}" = "1" ]; then - nextitem="${txtgenerate//%1/mkinitcpio.conf-nvme}" - else - nextitem="${txtbootloader}" - fi - ;; - "${txtgenerate//%1/mkinitcpio.conf-nvme}") - archgenmkinitcpionvme - nextitem="${txtbootloader}" - ;; - "${txtedit//%1/fstab}") - ${EDITOR} /mnt/etc/fstab - nextitem="${txtedit//%1/fstab}" - ;; - "${txtedit//%1/crypttab}") - ${EDITOR} /mnt/etc/crypttab - nextitem="${txtedit//%1/crypttab}" - ;; - "${txtedit//%1/mkinitcpio.conf}") - archeditmkinitcpio - nextitem="${txtedit//%1/mkinitcpio.conf}" - ;; - "${txtedit//%1/mirrorlist}") - ${EDITOR} /mnt/etc/pacman.d/mirrorlist - nextitem="${txtedit//%1/mirrorlist}" - ;; - "${txtbootloader}") - archbootloadermenu - nextitem="${txtextrasmenu}" - ;; - "${txtextrasmenu}") - archextrasmenu - nextitem="archdi" - ;; - "archdi") - installarchdi - nextitem="archdi" - ;; - esac - archmenu "${nextitem}" - fi -} - -archchroot(){ - echo "arch-chroot /mnt /root" - cp ${0} /mnt/root - chmod 755 /mnt/root/$(basename "${0}") - arch-chroot /mnt /root/$(basename "${0}") --chroot ${1} ${2} - rm /mnt/root/$(basename "${0}") - echo "exit" -} - - -archsethostname(){ - hostname=$(whiptail --backtitle "${apptitle}" --title "${txtsethostname}" --inputbox "" 0 0 "archlinux" 3>&1 1>&2 2>&3) - if [ "$?" = "0" ]; then - clear - echo "echo \"${hostname}\" > /mnt/etc/hostname" - echo "${hostname}" > /mnt/etc/hostname - pressanykey - fi -} - -archsetkeymap(){ - #items=$(localectl list-keymaps) - #options=() - #for item in ${items}; do - # options+=("${item}" "") - #done - items=$(find /usr/share/kbd/keymaps/ -type f -printf "%f\n" | sort -V) - options=() - defsel="" - for item in ${items}; do - if [ "${item%%.*}" == "${keymap}" ]; then - defsel="${item%%.*}" - fi - options+=("${item%%.*}" "") - done - keymap=$(whiptail --backtitle "${apptitle}" --title "${txtsetkeymap}" --menu "" --default-item "${defsel}" 0 0 0 \ - "${options[@]}" \ - 3>&1 1>&2 2>&3) - if [ "$?" = "0" ]; then - clear - echo "echo \"KEYMAP=${keymap}\" > /mnt/etc/vconsole.conf" - echo "KEYMAP=${keymap}" > /mnt/etc/vconsole.conf - pressanykey - fi -} - -archsetfont(){ - items=$(find /usr/share/kbd/consolefonts/*.psfu.gz -printf "%f\n") - - options=() - for item in ${items}; do - options+=("${item%%.*}" "") - done - vcfont=$(whiptail --backtitle "${apptitle}" --title "${txtsetfont} (${txtoptional})" --menu "" 0 0 0 \ - "${options[@]}" \ - 3>&1 1>&2 2>&3) - if [ "$?" = "0" ]; then - clear - echo "echo \"FONT=${vcfont}\" >> /mnt/etc/vconsole.conf" - echo "FONT=${vcfont}" >> /mnt/etc/vconsole.conf - pressanykey - fi -} - -archsetlocale(){ - items=$(ls /usr/share/i18n/locales) - options=() - defsel="" - for item in ${items}; do - if [ "${defsel}" == "" ]&&[ "${keymap::2}" == "${item::2}" ]; then - defsel="${item}" - fi - options+=("${item}" "") - done - locale=$(whiptail --backtitle "${apptitle}" --title "${txtsetlocale}" --menu "" --default-item "${defsel}" 0 0 0 \ - "${options[@]}" \ - 3>&1 1>&2 2>&3) - if [ "$?" = "0" ]; then - clear - echo "echo \"LANG=${locale}.UTF-8\" > /mnt/etc/locale.conf" - echo "LANG=${locale}.UTF-8" > /mnt/etc/locale.conf - echo "echo \"LC_COLLATE=C\" >> /mnt/etc/locale.conf" - echo "LC_COLLATE=C" >> /mnt/etc/locale.conf - echo "sed -i '/#${locale}.UTF-8/s/^#//g' /mnt/etc/locale.gen" - sed -i '/#'${locale}'.UTF-8/s/^#//g' /mnt/etc/locale.gen - archchroot setlocale - pressanykey - fi -} -archsetlocalechroot(){ - echo "locale-gen" - locale-gen - exit -} - -archsettime(){ - items=$(ls -l /mnt/usr/share/zoneinfo/ | grep '^d' | gawk -F':[0-9]* ' '/:/{print $2}') - 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 - - clear - echo "ln -sf /mnt/usr/share/zoneinfo/${timezone} /mnt/etc/localtime" - ln -sf /usr/share/zoneinfo/${timezone} /mnt/etc/localtime - pressanykey - - options=() - options+=("UTC" "") - options+=("Local" "") - sel=$(whiptail --backtitle "${apptitle}" --title "${txtsettime}" --menu "${txthwclock}" 0 0 0 \ - "${options[@]}" \ - 3>&1 1>&2 2>&3) - if [ ! "$?" = "0" ]; then - return 1 - fi - - clear - case ${sel} in - "${txthwclockutc}") - archchroot settimeutc - ;; - "${txthwclocklocal}") - archchroot settimelocal - ;; - esac - -# if (whiptail --backtitle "${apptitle}" --title "${txtsettime}" --yesno "${txtuseutcclock}" 0 0) then -# clear -# archchroot settimeutc -# else -# clear -# archchroot settimelocal -# fi - - pressanykey - -} -archsettimeutcchroot(){ - echo "hwclock --systohc --utc" - hwclock --systohc --utc - exit -} -archsettimelocalchroot(){ - echo "hwclock --systohc --localtime" - hwclock --systohc --localtime - exit -} - -archsetrootpassword(){ - clear - archchroot setrootpassword - pressanykey -} -archsetrootpasswordchroot(){ - echo "passwd root" - passed=1 - while [[ ${passed} != 0 ]]; do - passwd root - passed=$? - done - exit -} - -archgenfstabmenu(){ - options=() - options+=("UUID" "genfstab -U") - options+=("LABEL" "genfstab -L") - options+=("PARTUUID" "genfstab -t PARTUUID") - options+=("PARTLABEL" "genfstab -t PARTLABEL") - sel=$(whiptail --backtitle "${apptitle}" --title "${txtgenerate//%1/fstab}" --menu "" --cancel-button "${txtback}" --default-item "${nextitem}" 0 0 0 \ - "${options[@]}" \ - 3>&1 1>&2 2>&3) - if [ "$?" = "0" ]; then - case ${sel} in - "UUID") - clear - echo "genfstab -U -p /mnt > /mnt/etc/fstab" - genfstab -U -p /mnt > /mnt/etc/fstab - ;; - "LABEL") - clear - echo "genfstab -L -p /mnt > /mnt/etc/fstab" - genfstab -L -p /mnt > /mnt/etc/fstab - ;; - "PARTUUID") - clear - echo "genfstab -t PARTUUID -p /mnt > /mnt/etc/fstab" - genfstab -t PARTUUID -p /mnt > /mnt/etc/fstab - ;; - "PARTLABEL") - clear - echo "genfstab -t PARTLABEL -p /mnt > /mnt/etc/fstab" - genfstab -t PARTLABEL -p /mnt > /mnt/etc/fstab - ;; - esac - fi - pressanykey -} - -archgencrypttab(){ - clear - echo "echo -e \"${crypttab}\" >> /mnt/etc/crypttab" - echo -e "${crypttab}" >> /mnt/etc/crypttab - pressanykey -} - -archgenmkinitcpioluks(){ - clear - echo "sed -i \"s/block filesystems/block encrypt filesystems/g\" /mnt/etc/mkinitcpio.conf" - sed -i "s/block filesystems/block encrypt filesystems/g" /mnt/etc/mkinitcpio.conf - archchroot genmkinitcpio - pressanykey -} -archgenmkinitcpionvme(){ - clear - echo "sed -i \"s/MODULES=()/MODULES=(nvme)/g\" /mnt/etc/mkinitcpio.conf" - sed -i "s/MODULES=()/MODULES=(nvme)/g" /mnt/etc/mkinitcpio.conf - archchroot genmkinitcpio - pressanykey -} - -archeditmkinitcpio(){ - ${EDITOR} /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(){ - echo "mkinitcpio -p linux" - mkinitcpio -p linux - exit -} - - -archbootloadermenu(){ - options=() - options+=("grub" "") - if [ "${efimode}" == "1" ]; then - options+=("systemd-boot" "") - options+=("refind" "") - fi - if [ "${efimode}" != "2" ]; then - options+=("syslinux" "") - fi - sel=$(whiptail --backtitle "${apptitle}" --title "${txtbootloadermenu}" --menu "" --cancel-button "${txtback}" 0 0 0 \ - "${options[@]}" \ - 3>&1 1>&2 2>&3) - if [ "$?" = "0" ]; then - case ${sel} in - "grub") archbootloadergrubmenu;; - "systemd-boot")archbootloadersystemdbmenu;; - "refind") archbootloaderrefindmenu;; - "syslinux")archbootloadersyslinuxbmenu;; - esac - fi -} - - -archbootloadergrubmenu(){ - if [ "${1}" = "" ]; then - nextblitem="." - else - nextblitem=${1} - fi - options=() - options+=("${txtinstall//%1/grub}" "pacstrap grub (efibootmgr), grub-mkconfig") - options+=("${txtedit//%1/grub}" "(${txtoptional})") - options+=("${txtinstall//%1/bootloader}" "grub-install") - sel=$(whiptail --backtitle "${apptitle}" --title "${txtbootloadergrubmenu}" --menu "" --cancel-button "${txtback}" --default-item "${nextblitem}" 0 0 0 \ - "${options[@]}" \ - 3>&1 1>&2 2>&3) - if [ "$?" = "0" ]; then - case ${sel} in - "${txtinstall//%1/grub}") - archgrubinstall - nextblitem="${txtinstall//%1/bootloader}" - ;; - "${txtedit//%1/grub}") - ${EDITOR} /mnt/etc/default/grub - if (whiptail --backtitle "${apptitle}" --title "${txtedit//%1/grub}" --yesno "${txtrungrubmakeconfig}" 0 0) then - clear - archchroot grubinstall - pressanykey - fi - nextblitem="${txtinstall//%1/bootloader}" - ;; - "${txtinstall//%1/bootloader}") - archgrubinstallbootloader - nextblitem="${txtinstall//%1/bootloader}" - ;; - esac - archbootloadergrubmenu "${nextblitem}" - fi -} - -archgrubinstall(){ - clear - echo "pacstrap /mnt grub" - pacstrap /mnt grub - pressanykey - - if [ "${eficomputer}" == "1" ]; then - if [ "${efimode}" == "1" ]||[ "${efimode}" == "2" ]; then - if (whiptail --backtitle "${apptitle}" --title "${txtinstall//%1/efibootmgr}" --yesno "${txtefibootmgr}" 0 0) then - clear - echo "pacstrap /mnt efibootmgr" - pacstrap /mnt efibootmgr - pressanykey - fi - else - if (whiptail --backtitle "${apptitle}" --title "${txtinstall//%1/efibootmgr}" --yesno "${txtefibootmgr}" --defaultno 0 0) then - clear - echo "pacstrap /mnt efibootmgr" - pacstrap /mnt efibootmgr - pressanykey - fi - fi - fi - - if [ "${luksroot}" = "1" ]; then - if (whiptail --backtitle "${apptitle}" --title "${txtinstall//%1/grub}" --yesno "${txtgrubluksdetected}" 0 0) then - clear - echo "sed -i /GRUB_CMDLINE_LINUX=/c\GRUB_CMDLINE_LINUX=\\\"cryptdevice=/dev/disk/by-uuid/${luksrootuuid}:root\\\" /mnt/etc/default/grub" - sed -i /GRUB_CMDLINE_LINUX=/c\GRUB_CMDLINE_LINUX=\"cryptdevice=/dev/disk/by-uuid/${luksrootuuid}:root\" /mnt/etc/default/grub - pressanykey - fi - fi - - clear - archchroot grubinstall - pressanykey -} -archgrubinstallchroot(){ - echo "mkdir /boot/grub" - echo "grub-mkconfig -o /boot/grub/grub.cfg" - mkdir /boot/grub - grub-mkconfig -o /boot/grub/grub.cfg - exit -} - -archgrubinstallbootloader(){ - device=$( selectdisk "${txtinstall//%1/bootloader}" ) - if [ "$?" = "0" ]; then - if [ "${eficomputer}" == "1" ]; 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 "${txtback}" 0 0 0 \ - "${options[@]}" \ - 3>&1 1>&2 2>&3) - if [ "$?" = "0" ]; then - clear - case ${sel} in - "BIOS") archchroot grubbootloaderinstall ${device};; - "EFI") archchroot grubbootloaderefiinstall ${device};; - "BIOS+EFI") archchroot grubbootloaderefiusbinstall ${device};; - esac - pressanykey - fi - else - clear - archchroot grubbootloaderinstall ${device} - pressanykey - fi - fi -} -archgrubinstallbootloaderchroot(){ - if [ ! "${1}" = "none" ]; then - echo "grub-install --target=i386-pc --recheck ${1}" - grub-install --target=i386-pc --recheck ${1} - fi - exit -} -archgrubinstallbootloaderefichroot(){ - if [ ! "${1}" = "none" ]; then - echo "grub-install --target=x86_64-efi --efi-directory=/boot --recheck ${1}" - grub-install --target=x86_64-efi --efi-directory=/boot --recheck ${1} - isvbox=$(lspci | grep "VirtualBox G") - if [ "${isvbox}" ]; then - echo "VirtualBox detected, creating startup.nsh..." - echo "\EFI\arch\grubx64.efi" > /boot/startup.nsh - fi - fi - exit -} -archgrubinstallbootloaderefiusbchroot(){ - if [ ! "${1}" = "none" ]; then - echo "grub-install --target=i386-pc --recheck ${1}" - grub-install --target=i386-pc --recheck ${1} - echo "grub-install --target=x86_64-efi --efi-directory=/boot --removable --recheck ${1}" - grub-install --target=x86_64-efi --efi-directory=/boot --removable --recheck ${1} - isvbox=$(lspci | grep "VirtualBox G") - if [ "${isvbox}" ]; then - echo "VirtualBox detected, creating startup.nsh..." - echo "\EFI\arch\grubx64.efi" > /boot/startup.nsh - fi - fi - exit -} - - -archbootloadersyslinuxbmenu(){ - if [ "${1}" = "" ]; then - nextblitem="." - else - nextblitem=${1} - fi - options=() - options+=("${txtinstall//%1/syslinux}" "pacstrap syslinux (gptfdisk,mtools)") - options+=("${txtedit//%1/syslinux}" "(${txtoptional})") - options+=("${txtinstall//%1/bootloader}" "syslinux-install_update") - sel=$(whiptail --backtitle "${apptitle}" --title "${txtbootloadersyslinuxmenu}" --menu "" --cancel-button "${txtback}" --default-item "${nextblitem}" 0 0 0 \ - "${options[@]}" \ - 3>&1 1>&2 2>&3) - if [ "$?" = "0" ]; then - case ${sel} in - "${txtinstall//%1/syslinux}") - archsyslinuxinstall - nextblitem="${txtinstall//%1/bootloader}" - ;; - "${txtedit//%1/syslinux}") - ${EDITOR} /mnt/boot/syslinux/syslinux.cfg - nextblitem="${txtinstall//%1/bootloader}" - ;; - "${txtinstall//%1/bootloader}") - archsyslinuxinstallbootloader - nextblitem="${txtinstall//%1/bootloader}" - ;; - esac - archbootloadersyslinuxbmenu "${nextblitem}" - fi -} -archsyslinuxinstall(){ - clear - - if [ "${efimode}" == "1" ]||[ "${efimode}" == "2" ]; then - echo "${txtsyslinuxaddefibootmgr}" - additionalpkg=${additionalpkg}"efibootmgr " - fi - - if [ "${isnvme}" = "1" ]; then - if [ "$(parted ${realrootdev::(-2)} print|grep gpt)" != "" ]; then - echo "${txtsyslinuxaddgptfdisk}" - additionalpkg=${additionalpkg}"gptfdisk " - fi - else - if [ "$(parted ${realrootdev::8} print|grep gpt)" != "" ]; then - echo "${txtsyslinuxaddgptfdisk}" - additionalpkg=${additionalpkg}"gptfdisk " - fi - fi - - if [ "${bootdev}" != "" ]; then - if [ "$(parted ${bootdev} print|grep fat)" != "" ]; then - echo "${txtsyslinuxaddmtools}" - additionalpkg=${additionalpkg}"mtools " - fi - fi - - echo "pacstrap /mnt syslinux ${additionalpkg}" - pacstrap /mnt syslinux ${additionalpkg} - pressanykey - - clear - echo "Updating /boot/syslinux/syslinux.cfg" - if [ "${luksroot}" = "1" ]; then - echo "sed -i \"/APPEND\ root=/c\ APPEND root=/dev/mapper/root cryptdevice=${realrootdev}:root rw\" /mnt/boot/syslinux/syslinux.cfg" - sed -i "/APPEND\ root=/c\ APPEND root=/dev/mapper/root cryptdevice=${realrootdev}:root\ rw" /mnt/boot/syslinux/syslinux.cfg - else - echo "sed -i \"/APPEND\ root=/c\ APPEND root=${rootdev} rw\" /mnt/boot/syslinux/syslinux.cfg" - sed -i "/APPEND\ root=/c\ APPEND root=${rootdev}\ rw" /mnt/boot/syslinux/syslinux.cfg - fi - - pressanykey -} -archsyslinuxinstallbootloader(){ - clear - if [ "${efimode}" == "1" ]||[ "${efimode}" == "2" ]; then - archchroot syslinuxbootloaderefiinstall ${bootdev} - else - archchroot syslinuxbootloaderinstall ${bootdev} - fi - pressanykey -} -archsyslinuxinstallbootloaderchroot(){ - if [ ! "${1}" = "none" ]; then - echo "syslinux-install_update -i -a -m" - syslinux-install_update -i -a -m - fi - exit -} -archsyslinuxinstallbootloaderefichroot(){ - if [ ! "${1}" = "none" ]; then - echo "cp -r /usr/lib/syslinux/efi64/* /boot/syslinux" - cp -r /usr/lib/syslinux/efi64/* /boot/syslinux - if [ "${1::8}" == "/dev/nvm" ]; then - echo "efibootmgr --create --disk ${1::(-2)} --part ${1:(-1)} --loader /syslinux/syslinux.efi --label "Syslinux" --verbose" - efibootmgr --create --disk ${1::(-2)} --part ${1:(-1)} --loader /syslinux/syslinux.efi --label "Syslinux" --verbose - else - echo "efibootmgr --create --disk ${1::8} --part ${1:(-1)} --loader /syslinux/syslinux.efi --label "Syslinux" --verbose" - efibootmgr --create --disk ${1::8} --part ${1:(-1)} --loader /syslinux/syslinux.efi --label "Syslinux" --verbose - fi - isvbox=$(lspci | grep "VirtualBox G") - if [ "${isvbox}" ]; then - echo "VirtualBox detected, creating startup.nsh..." - echo "\syslinux\syslinux.efi" > /boot/startup.nsh - fi - fi - exit -} - - -archbootloadersystemdbmenu(){ - if [ "${1}" = "" ]; then - nextblitem="." - else - nextblitem=${1} - fi - options=() - options+=("${txtinstall//%1/systemd-boot}" "bootctl install") - options+=("${txtedit//%1/loader.conf}" "(${txtoptional})") - options+=("${txtedit//%1/entries}" "(${txtoptional})") - sel=$(whiptail --backtitle "${apptitle}" --title "${txtbootloadersystemdmenu}" --menu "" --cancel-button "${txtback}" --default-item "${nextblitem}" 0 0 0 \ - "${options[@]}" \ - 3>&1 1>&2 2>&3) - if [ "$?" = "0" ]; then - case ${sel} in - "${txtinstall//%1/systemd-boot}") - archsystemdinstall - nextblitem="${txtinstall//%1/loader.conf}" - ;; - "${txtedit//%1/loader.conf}") - ${EDITOR} /mnt/boot/loader/loader.conf - nextblitem="${txtedit//%1/entries}" - ;; - "${txtedit//%1/entries}") - ${EDITOR} /mnt/boot/loader/entries/* - nextblitem="${txtedit//%1/entries}" - ;; - esac - archbootloadersystemdbmenu "${nextblitem}" - fi -} -archsystemdinstall(){ - clear - archchroot systemdbootloaderinstall ${realrootdev} - - partuuid=$(blkid -s PARTUUID -o value ${realrootdev}) - parttype=$(blkid -s TYPE -o value ${rootdev}) - - echo "cp /mnt/usr/share/systemd/bootctl/arch.conf /mnt/boot/loader/entries" - echo "echo \"timeout 2\" >> /mnt/boot/loader/loader.conf" - echo "cp /mnt/usr/share/systemd/bootctl/loader.conf /mnt/boot/loader" - if [ "${luksroot}" = "1" ]; then - cryptuuid=$(blkid -s UUID -o value ${realrootdev}) - echo "sed -i \"s/PARTUUID=XXXX/\\/dev\\/mapper\\/root/\" /mnt/boot/loader/entries/arch.conf" - echo "sed -i \"s/XXXX/${parttype}/\" /mnt/boot/loader/entries/arch.conf" - echo "sed -i \"s/root=/cryptdevice=UUID=${cryptuuid}:root root=/\" /mnt/boot/loader/entries/arch.conf" - else - echo "sed -i \"s/PARTUUID=XXXX/PARTUUID=${partuuid}/\" /mnt/boot/loader/entries/arch.conf" - echo "sed -i \"s/XXXX/${parttype}/\" /mnt/boot/loader/entries/arch.conf" - fi - echo "cp /mnt/boot/loader/entries/arch.conf /mnt/boot/loader/entries/arch-fallback.conf" - echo "sed -i \"s/Arch Linux/Arch Linux Fallback/\" /mnt/boot/loader/entries/arch-fallback.conf" - echo "sed -i \"s/initramfs-linux/initramfs-linux-fallback/\" /mnt/boot/loader/entries/arch-fallback.conf" - - cp /mnt/usr/share/systemd/bootctl/loader.conf /mnt/boot/loader - echo "timeout 2" >> /mnt/boot/loader/loader.conf - cp /mnt/usr/share/systemd/bootctl/arch.conf /mnt/boot/loader/entries - - - if [ "${luksroot}" = "1" ]; then - sed -i "s/PARTUUID=XXXX/\/dev\/mapper\/root/" /mnt/boot/loader/entries/arch.conf - sed -i "s/XXXX/${parttype}/" /mnt/boot/loader/entries/arch.conf - sed -i "s/root=/cryptdevice=UUID=${cryptuuid}:root root=/" /mnt/boot/loader/entries/arch.conf - else - sed -i "s/PARTUUID=XXXX/PARTUUID=${partuuid}/" /mnt/boot/loader/entries/arch.conf - sed -i "s/XXXX/${parttype}/" /mnt/boot/loader/entries/arch.conf - fi - - cp /mnt/boot/loader/entries/arch.conf /mnt/boot/loader/entries/arch-fallback.conf - sed -i "s/Arch Linux/Arch Linux Fallback/" /mnt/boot/loader/entries/arch-fallback.conf - sed -i "s/initramfs-linux/initramfs-linux-fallback/" /mnt/boot/loader/entries/arch-fallback.conf - - pressanykey -} -archsystemdinstallchroot(){ - echo "bootctl --path=/boot install" - bootctl --path=/boot install - isvbox=$(lspci | grep "VirtualBox G") - if [ "${isvbox}" ]; then - echo "VirtualBox detected, creating startup.nsh..." - echo "\EFI\systemd\systemd-bootx64.efi" > /boot/startup.nsh - fi -} - - -archbootloaderrefindmenu(){ - if [ "${1}" = "" ]; then - nextblitem="." - else - nextblitem=${1} - fi - options=() - options+=("${txtinstall//%1/refind}" "pacstrap refind-efi") - options+=("${txtedit//%1/refind_linux.conf}" "(${txtoptional})") - sel=$(whiptail --backtitle "${apptitle}" --title "${txtbootloaderrefindmenu}" --menu "" --cancel-button "${txtback}" --default-item "${nextblitem}" 0 0 0 \ - "${options[@]}" \ - 3>&1 1>&2 2>&3) - if [ "$?" = "0" ]; then - case ${sel} in - "${txtinstall//%1/refind}") - archrefindinstall - nextblitem="${txtedit//%1/refind_linux.conf}" - ;; - "${txtedit//%1/refind_linux.conf}") - ${EDITOR} /mnt/boot/refind_linux.conf - nextblitem="${txtedit//%1/refind_linux.conf}" - ;; - esac - archbootloaderrefindmenu "${nextblitem}" - fi - -} -archrefindinstall(){ - clear - - echo "pacstrap /mnt refind-efi" - echo "archchroot refindbootloaderinstall ${realrootdev}" - echo "echo \"\\\"Arch Linux \\\" \\\"root=UUID=${rootuuid} rw add_efi_memmap\\\"\" > /mnt/boot/refind_linux.conf" - echo "echo \"\\\"Arch Linux Fallback\\\" \\\"root=UUID=${rootuuid} rw add_efi_memmap initrd=/initramfs-linux-fallback.img\\\"\" >> /mnt/boot/refind_linux.conf" - echo "echo \"\\\"Arch Linux Terminal\\\" \\\"root=UUID=${rootuuid} rw add_efi_memmap systemd.unit=multi-user.target\\\"\" >> /mnt/boot/refind_linux.conf" - - pacstrap /mnt refind-efi - archchroot refindbootloaderinstall ${realrootdev} - rootuuid=$(blkid -s UUID -o value ${realrootdev}) - echo "\"Arch Linux \" \"root=UUID=${rootuuid} rw add_efi_memmap\"" > /mnt/boot/refind_linux.conf - echo "\"Arch Linux Fallback\" \"root=UUID=${rootuuid} rw add_efi_memmap initrd=/initramfs-linux-fallback.img\"" >> /mnt/boot/refind_linux.conf - echo "\"Arch Linux Terminal\" \"root=UUID=${rootuuid} rw add_efi_memmap systemd.unit=multi-user.target\"" >> /mnt/boot/refind_linux.conf - pressanykey -} -archrefindinstallchroot(){ - #--usedefault /dev/sdXY --alldrivers - echo "refind-install" - refind-install - isvbox=$(lspci | grep "VirtualBox G") - if [ "${isvbox}" ]; then - echo "VirtualBox detected, creating startup.nsh..." - echo "\EFI\refind\refind_x64.efi" > /boot/startup.nsh - fi -} - - -archextrasmenu(){ - pkgs="" - options=() - options+=("nano" "" on) - options+=("vim" "" on) - options+=("dhcpcd" "" on) - sel=$(whiptail --backtitle "${apptitle}" --title "${txtextrasmenu}" --checklist "" 0 0 0 \ - "${options[@]}" \ - 3>&1 1>&2 2>&3) - if [ ! "$?" = "0" ]; then - return 1 - fi - for itm in $sel; do - pkgs="$pkgs $(echo $itm | sed 's/"//g')" - done - clear - echo "pacstrap /mnt ${pkgs}" - pacstrap /mnt ${pkgs} - if [[ "${pkgs}" == *"dhcpcd"* ]]; then - archchroot enabledhcpcd - fi - pressanykey -} -archenabledhcpcdchroot(){ - echo "systemctl enable dhcpcd" - systemctl enable dhcpcd - exit -} - -installarchdi(){ - 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 ?" - if(whiptail --backtitle "${apptitle}" --title "archdi" --yesno "${txtinstallarchdi}" 0 0) then - clear - echo "pacstrap /mnt wget libnewt" - pacstrap /mnt wget libnewt - fi - if [ "$?" = "0" ]; then - options=() - options+=("${txtarchdiinstallandlaunch}" "") - options+=("${txtarchdilaunch}" "") - options+=("${txtarchdiinstall}" "") - sel=$(whiptail --backtitle "${apptitle}" --title "${txtarchdimenu}" --menu "" --cancel-button "${txtback}" 0 0 0 \ - "${options[@]}" \ - 3>&1 1>&2 2>&3) - if [ "$?" = "0" ]; then - case ${sel} in - "${txtarchdiinstallandlaunch}") archchroot archdiinstallandlaunch;; - "${txtarchdilaunch}") archchroot archdilaunch;; - "${txtarchdiinstall}") - clear - archchroot archdiinstall - pressanykey - ;; - esac - fi - fi -} -archdidownload(){ - txtselectserver="Select source server :" - txtback="Back" - options=() - options+=("sourceforge.net" "recommended") - options+=("github.com" "") - sel=$(whiptail --backtitle "${apptitle}" --title "${txtselectserver}" --menu "" --cancel-button "${txtback}" 0 0 0 \ - "${options[@]}" \ - 3>&1 1>&2 2>&3) - if [ "$?" = "0" ]; then - case ${sel} in - "sourceforge.net") - archdiurl=archdi.sourceforge.net/archdi - ;; - "github.com") - archdiurl=matmoul.github.io/archdi >archdi - ;; - esac - fi - echo "curl -L ${archdiurl} >archdi" - curl -L ${archdiurl} >archdi -} -archdiinstallandlaunchchroot(){ - cd - archdidownload - sh archdi -i - archdi --chroot - exit -} -archdilaunchchroot(){ - cd - archdidownload - sh archdi --chroot - rm archdi - exit -} -archdiinstallchroot(){ - cd - archdidownload - sh archdi -i - exit -} -# -------------------------------------------------------- - - - -# -------------------------------------------------------- -pressanykey(){ - read -n1 -p "${txtpressanykey}" -} - -loadstrings(){ - - locale=en_US.UTF-8 - #font= - - txtexit="Exit" - txtback="Back" - txtignore="Ignore" - - txtselectserver="Select source server :" - - txtmainmenu="Main Menu" - txtlanguage="Language" - txtsetkeymap="Set Keyboard Layout" - txteditor="Editor" - 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" - txtunmount="Unmount" - 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" - txtcreateluksdevice="Create luks device :" - txtopenluksdevice="Open luks device :" - txtluksdevicecreated="luks device created !" - - txtinstallmenu="Install Menu" - - txtarchinstallmenu="Arch Install Menu" - - txtselectmirrorsbycountry="Select mirrors by country" - txtselectcountry="Select country" - txteditmirrorlist="Edit mirrorlist" - txtinstallarchlinux="Install Arch Linux" - txtinstallarchlinuxkernel="Kernel" - txtinstallarchlinuxfirmwares="Firmwares" - txtinstallarchlinuxfilesystems="File Systems" - txtinstallarchlinuxcustompackagelist="Custom Package List" - txtconfigarchlinux="Config Arch Linux" - - txtsethostname="Set Computer Name" - txtsetfont="Set Font" - txtsetlocale="Set Locale" - txtsettime="Set Time" - txtsetrootpassword="Set root password" - - txthwclock="Hardware clock :" - txthwclockutc="UTC" - txthwclocklocal="Local" - - txtbootloader="Bootloader" - txtbootloadermenu="Choose your bootloader" - - txtefibootmgr="efibootmgr is required for EFI computers." - - txtbootloadergrubmenu="Grub Install Menu" - txtrungrubmakeconfig="Run grub-mkconfig ?" - txtgrubluksdetected="Encrypted root partion !\n\nAdd cryptdevice= to GRUB_CMDLINE_LINUX in /etc/default/grub ?" - - txtbootloadersyslinuxmenu="Syslinux Install Menu" - txtsyslinuxaddefibootmgr="EFI install require efibootmgr" - txtsyslinuxaddgptfdisk="GPT disk require gptfdisk" - txtsyslinuxaddmtools="FAT boot part require mtools" - - txtbootloadersystemdmenu="Systemd-boot Install Menu" - - txtbootloaderrefindmenu="rEFInd Install Menu" - - txtextrasmenu="Extras" - - 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." - - 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" -} - -# -------------------------------------------------------- - - - -# -------------------------------------------------------- -while (( "$#" )); do - case ${1} in - --help) - echo "archfi" - echo "------" - echo "-cpl | --custom-package-list url Set custom package list url" - echo "-sf | --skip-font Skip setfont from language files" - echo "-efiX -efi0 : disable EFI, -efi1 efi inst, -efi2 efi hybrid inst" - echo "-t | --test ghusername ghbranch Test archfi script and language" - exit 0 - ;; - -cpl | --custom-package-list) - curl -L ${2} > /tmp/archfi-custom-package-list - if [[ "$?" != "0" ]]; then - echo "Error downloading custom package list" - exit 0 - fi - cpl=1 - ;; - -sf | --skip-font) skipfont=1;; - -t | --test) - wget -O archfi https://raw.githubusercontent.com/${2}/archfi/${3}/archfi - sh archfi -tt ${2} ${3} - exit 0 - ;; - -tt) baseurl="https://raw.githubusercontent.com/${2}/archfi/${3}";; - -efi0) efimode=0;; - -efi1) - eficomputer=1 - efimode=1 - ;; - -efi2) - eficomputer=1 - efimode=2 - ;; - --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;; - 'grubinstall') archgrubinstallchroot;; - 'grubbootloaderinstall') archgrubinstallbootloaderchroot ${args};; - 'grubbootloaderefiinstall') archgrubinstallbootloaderefichroot ${args};; - 'grubbootloaderefiusbinstall') archgrubinstallbootloaderefiusbchroot ${args};; - 'syslinuxbootloaderinstall') archsyslinuxinstallbootloaderchroot ${args};; - 'syslinuxbootloaderefiinstall') archsyslinuxinstallbootloaderefichroot ${args};; - 'systemdbootloaderinstall') archsystemdinstallchroot ${args};; - 'refindbootloaderinstall') archrefindinstallchroot ${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 - if [ "${eficomputer}" != "1" ]; then - eficomputer=0 - fi - else - eficomputer=1 - if [ "${efimode}" == "" ]; then - efimode=1 - fi - fi - loadstrings - EDITOR=nano - mainmenu -fi - -exit 0 -# -------------------------------------------------------- diff --git a/hyperfi b/hyperfi new file mode 100644 index 0000000..3d7c462 --- /dev/null +++ b/hyperfi @@ -0,0 +1,1922 @@ +#!/bin/bash + +# Hyperbola GNU+Linux-libre Fast Install (hyperfi) +# -------------------------------- +# Last author : Jesus E. +# Firt author : MatMoul +# https://github.com/MatMoul +# http://sourceforge.net/u/matmoul +# project : https://github.com/MatMoul/hyperfi +# http://sourceforge.net/projects/hyperfi/ +# Fist license : LGPL-3.0 (http://opensource.org/licenses/lgpl-3.0.html) +# +# referance : https://wiki.hyperbola.info/doku.php?id=en:guide:installation + +apptitle="Hyperbola GNU+Linux-Libre Fast Install (hyperfi) - Version: 0.3.1 (GPLv3)" +baseurl=https://codeberg.org/heckyel/hyperfi/raw/branch/master +cpl=0 +skipfont="0" +fspkgs="" + + +# -------------------------------------------------------- +mainmenu(){ + if [ "${1}" = "" ]; then + nextitem="." + else + nextitem=${1} + fi + options=() + options+=("${txtlanguage}" "Language") + options+=("${txtsetkeymap}" "(loadkeys ...)") + options+=("${txteditor}" "(${txtoptional})") + options+=("${txtdiskpartmenu}" "") + options+=("${txtselectpartsmenu}" "") + options+=("" "") + options+=("${txtreboot}" "") + sel=$(whiptail --backtitle "${apptitle}" --title "${txtmainmenu}" --menu "" --cancel-button "${txtexit}" --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}" + ;; + "${txteditor}") + chooseeditor + 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+=("Arabic" "(By Mohammad Alawadi)") + options+=("Brazilian" "(By MaxWilliamJF)") + options+=("Dutch" "(By bowero)") + options+=("English" "(By MatMoul)") + options+=("French" "(By MatMoul)") + options+=("German" "(By untergrundbiber)") + options+=("Greek" "(By quelotic)") + options+=("Italian" "(By thegoldgoat)") + options+=("Hungarian" "(By KardiWeb)") + options+=("Norwegian" "(By mrboen94)") + options+=("Polish" "(By dawidd6)") + options+=("Portuguese" "(By hugok)") + options+=("Russian" "(By Anonymous_Prodject)") + options+=("Spanish" "(By Mystogab)") + options+=("Turkish" "(By c0b41)") + 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') + fi + if [ "${skipfont}" = "0" ]; then + eval $(setfont ${font}) + fi + font= + if [ "$(cat /etc/locale.gen | grep ""#${locale}"")" != "" ]; then + sed -i "/#${locale}/s/^#//g" /etc/locale.gen + locale-gen + fi + export LANG=${locale} + fi +} + +setkeymap(){ + #items=$(localectl list-keymaps) + #options=() + #for item in ${items}; do + # options+=("${item}" "") + #done + items=$(find /usr/share/kbd/keymaps/ -type f -printf "%f\n" | sort -V) + 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 + echo "loadkeys ${keymap}" + loadkeys ${keymap} + pressanykey + fi +} + +chooseeditor(){ + options=() + options+=("nano" "") + options+=("vim" "") + options+=("vi" "") + options+=("edit" "") + sel=$(whiptail --backtitle "${apptitle}" --title "${txteditor}" --menu "" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + clear + echo "export EDITOR=${sel}" + export EDITOR=${sel} + EDITOR=${sel} + pressanykey + fi +} + +rebootpc(){ + if (whiptail --backtitle "${apptitle}" --title "${txtreboot}" --yesno "${txtreboot} ?" --defaultno 0 0); then + clear + reboot + fi +} +# -------------------------------------------------------- + + + +# -------------------------------------------------------- +selectdisk(){ + items=$(lsblk -d -p -n -l -o NAME,SIZE -e 7,11) + options=() + IFS_ORIG=$IFS + IFS=$'\n' + for item in ${items} + do + options+=("${item}" "") + done + IFS=$IFS_ORIG + result=$(whiptail --backtitle "${APPTITLE}" --title "${1}" --menu "" 0 0 0 "${options[@]}" 3>&1 1>&2 2>&3) + if [ "$?" != "0" ] + then + return 1 + fi + echo ${result%%\ *} + return 0 +} + +diskpartmenu(){ + if [ "${1}" = "" ]; then + nextitem="." + else + nextitem=${1} + fi + options=() + if [ "${eficomputer}" == "0" ]; then + options+=("${txtautoparts} (gpt)" "") + options+=("${txtautoparts} (dos)" "") + 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 "${txtback}" --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(){ + device=$(selectdisk "${txtautoparts} (dos)") + 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 + if [ "${device::8}" == "/dev/nvm" ]; then + bootdev=${device}"p1" + swapdev=${device}"p2" + rootdev=${device}"p3" + else + bootdev=${device}"1" + swapdev=${device}"2" + rootdev=${device}"3" + fi + efimode="0" + fi + fi +} + +diskpartautogpt(){ + device=$(selectdisk "${txtautoparts} (gpt)") + 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 + if [ "${device::8}" == "/dev/nvm" ]; then + bootdev=${device}"p2" + swapdev=${device}"p3" + rootdev=${device}"p4" + else + bootdev=${device}"2" + swapdev=${device}"3" + rootdev=${device}"4" + fi + efimode="0" + fi + fi +} + +diskpartautoefi(){ + device=$(selectdisk "${txtautoparts} (gpt,efi)") + 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 + if [ "${device::8}" == "/dev/nvm" ]; then + bootdev=${device}"p1" + swapdev=${device}"p3" + rootdev=${device}"p4" + else + bootdev=${device}"1" + swapdev=${device}"3" + rootdev=${device}"4" + fi + efimode="1" + fi + fi +} + +diskpartautoefiusb(){ + device=$(selectdisk "${txtautoparts} (gpt,efi)") + 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 + if [ "${device::8}" == "/dev/nvm" ]; then + bootdev=${device}"p1" + swapdev= + rootdev=${device}"p4" + else + bootdev=${device}"1" + swapdev= + rootdev=${device}"4" + fi + efimode="2" + fi + fi +} + +diskpartcfdisk(){ + device=$( selectdisk "${txteditparts} (cfdisk)" ) + if [ "$?" = "0" ]; then + clear + cfdisk ${device} + fi +} + +diskpartcgdisk(){ + device=$( selectdisk "${txteditparts} (cgdisk)" ) + if [ "$?" = "0" ]; then + clear + cgdisk ${device} + fi +} +# -------------------------------------------------------- + + + +# -------------------------------------------------------- +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 + realrootdev=${rootdev} + + 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 + isnvme=0 + if [ "${bootdev::8}" == "/dev/nvm" ]; then + isnvme=1 + fi + if [ "${rootdev::8}" == "/dev/nvm" ]; then + isnvme=1 + fi + 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 "${txtback}" --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 + fspkgs="" + if [ ! "${bootdev}" = "" ]; then + formatbootdevice boot ${bootdev} + fi + if [ ! "${swapdev}" = "" ]; then + formatswapdevice swap ${swapdev} + fi + formatdevice root ${rootdev} + if [ ! "${homedev}" = "" ]; then + formatdevice home ${homedev} + fi + fi +} +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) + echo "mkfs.ext2 ${2}" + mkfs.ext2 ${2} + ;; + ext3) + echo "mkfs.ext3 ${2}" + mkfs.ext3 ${2} + ;; + ext4) + echo "mkfs.ext4 ${2}" + mkfs.ext4 ${2} + ;; + fat32) + fspkgs="${fspkgs[@]} dosfstools" + echo "mkfs.fat ${2}" + mkfs.fat ${2} + ;; + esac + echo "" + pressanykey +} +formatswapdevice(){ + options=() + options+=("swap" "") + 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/${swapdev}} swap" + echo "----------------------------------------------------" + case ${sel} in + swap) + echo "mkswap ${swapdev}" + mkswap ${swapdev} + echo "" + pressanykey + ;; + esac + clear +} +formatdevice(){ + options=() + options+=("btrfs" "") + options+=("ext4" "") + options+=("ext3" "") + options+=("ext2" "") + options+=("xfs" "") + options+=("f2fs" "") + options+=("jfs" "") + options+=("reiserfs" "") + if [ ! "${3}" = "noluks" ]; then + options+=("luks" "encrypted") + 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 + btrfs) + fspkgs="${fspkgs[@]} btrfs-progs" + echo "mkfs.btrfs -f ${2}" + mkfs.btrfs -f ${2} + if [ "${1}" = "root" ]; then + echo "mount ${2} /mnt" + echo "btrfs subvolume create /mnt/root" + echo "btrfs subvolume set-default /mnt/root" + echo "umount /mnt" + mount ${2} /mnt + btrfs subvolume create /mnt/root + btrfs subvolume set-default /mnt/root + umount /mnt + fi + ;; + ext4) + echo "mkfs.ext4 ${2}" + mkfs.ext4 ${2} + ;; + ext3) + echo "mkfs.ext3 ${2}" + mkfs.ext3 ${2} + ;; + ext2) + echo "mkfs.ext2 ${2}" + mkfs.ext2 ${2} + ;; + xfs) + fspkgs="${fspkgs[@]} xfsprogs" + echo "mkfs.xfs -f ${2}" + mkfs.xfs -f ${2} + ;; + f2fs) + fspkgs="${fspkgs[@]} f2fs-tools" + echo "mkfs.f2fs $2" + mkfs.f2fs $2 + ;; + jfs) + fspkgs="${fspkgs[@]} jfsutils" + echo "mkfs.xfs -f ${2}" + mkfs.jfs -f ${2} + ;; + reiserfs) + fspkgs="${fspkgs[@]} reiserfsprogs" + echo "mkfs.reiserfs -f ${2}" + mkfs.reiserfs -f ${2} + ;; + luks) + echo "${txtcreateluksdevice}" + echo "cryptsetup luksFormat ${2}" + cryptsetup luksFormat ${2} + if [ ! "$?" = "0" ]; then + pressanykey + return 1 + fi + pressanykey + echo "" + echo "${txtopenluksdevice}" + echo "cryptsetup luksOpen ${2} ${1}" + cryptsetup luksOpen ${2} ${1} + if [ ! "$?" = "0" ]; then + pressanykey + return 1 + fi + pressanykey + options=() + options+=("normal" "") + options+=("fast" "") + sel=$(whiptail --backtitle "${apptitle}" --title "${txtformatdevice}" --menu "Wipe device ?" --cancel-button="${txtignore}" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + case ${sel} in + normal) + echo "dd if=/dev/zero of=/dev/mapper/${1}" + dd if=/dev/zero of=/dev/mapper/${1} & PID=$! &>/dev/null + ;; + fast) + echo "dd if=/dev/zero of=/dev/mapper/${1} bs=60M" + dd if=/dev/zero of=/dev/mapper/${1} bs=60M & PID=$! &>/dev/null + ;; + esac + clear + sleep 1 + while kill -USR1 ${PID} &>/dev/null + do + sleep 1 + done + fi + echo "" + pressanykey + formatdevice ${1} /dev/mapper/${1} noluks + if [ "${1}" = "root" ]; then + realrootdev=${rootdev} + rootdev=/dev/mapper/${1} + luksroot=1 + luksrootuuid=$(cryptsetup luksUUID ${2}) + else + case ${1} in + home) homedev=/dev/mapper/${1} ;; + esac + luksdrive=1 + crypttab="\n${1} UUID=$(cryptsetup luksUUID ${2}) none" + fi + echo "" + echo "${txtluksdevicecreated}" + ;; + esac + echo "" + pressanykey +} + +mountparts(){ + clear + echo "mount ${rootdev} /mnt" + mount ${rootdev} /mnt + echo "mkdir /mnt/{boot,home}" + mkdir /mnt/{boot,home} 2>/dev/null + 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="${txtinstallhyperbola}" + else + nextitem=${1} + fi + options=() + options+=("${txtselectmirrorsbycountry}" "(${txtoptional})") + options+=("${txteditmirrorlist}" "(${txtoptional})") + options+=("${txtinstallhyperbola}" "pacstrap") + options+=("${txtconfighyperbola}" "") + sel=$(whiptail --backtitle "${apptitle}" --title "${txtinstallmenu}" --menu "" --cancel-button "${txtunmount}" --default-item "${nextitem}" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + case ${sel} in + "${txtselectmirrorsbycountry}") + selectmirrorsbycountry + nextitem="${txtinstallhyperbola}" + ;; + "${txteditmirrorlist}") + ${EDITOR} /etc/pacman.d/mirrorlist + nextitem="${txtinstallhyperbola}" + ;; + "${txtinstallhyperbola}") + if(installbase); then + nextitem="${txtconfighyperbola}" + fi + ;; + "${txtconfighyperbola}") + archmenu + nextitem="${txtconfighyperbola}" + ;; + esac + installmenu "${nextitem}" + else + unmountdevices + fi +} + +selectmirrorsbycountry() { + if [[ ! -f /etc/pacman.d/mirrorlist.backup ]]; then + cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.backup + fi + items=$( sed -n "/^##.*/N; {s/^## \(.*\)\nServer.*/\1/p}" < /etc/pacman.d/mirrorlist.backup | sort -u ) + options=() + IFS_ORIG=$IFS + IFS=$'\n' + for item in ${items}; do + options+=("${item}" "") + done + IFS=$IFS_ORIG + country=$(whiptail --backtitle "${APPTITLE}" --title "${txtselectcountry}" --menu "" 0 0 0 "${options[@]}" 3>&1 1>&2 2>&3) + if [ "$?" != "0" ]; then + return 1 + fi + sed "s/^\(Server .*\)/\#\1/;/^## $country/N; {s/^\(## .*\n\)\#Server \(.*\)/\1Server \2/}" < /etc/pacman.d/mirrorlist.backup > /etc/pacman.d/mirrorlist +} + +installbase(){ + pkgs="base" + options=() + options+=("linux-libre-lts" "") + sel=$(whiptail --backtitle "${apptitle}" --title "${txtinstallhyperbolakernel}" --menu "" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + pkgs+=" ${sel}" + else + return 1 + fi + + options=() + options+=("kernel-firmware" "(${txtoptional})" on) + sel=$(whiptail --backtitle "${apptitle}" --title "${txtinstallhyperbolafirmwares}" --checklist "" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ ! "$?" = "0" ]; then + return 1 + fi + for itm in $sel; do + pkgs="$pkgs $(echo $itm | sed 's/"//g')" + done + + options=() + if [[ "${fspkgs}" == *"dosfstools"* ]]; then + options+=("dosfstools" "" on) + else + options+=("dosfstools" "" off) + fi + if [[ "${fspkgs}" == *"btrfs-progs"* ]]; then + options+=("btrfs-progs" "" on) + else + options+=("btrfs-progs" "" off) + fi + if [[ "${fspkgs}" == *"xfsprogs"* ]]; then + options+=("xfsprogs" "" on) + else + options+=("xfsprogs" "" off) + fi + if [[ "${fspkgs}" == *"f2fs-tools"* ]]; then + options+=("f2fs-tools" "" on) + else + options+=("f2fs-tools" "" off) + fi + if [[ "${fspkgs}" == *"jfsutils"* ]]; then + options+=("jfsutils" "" on) + else + options+=("jfsutils" "" off) + fi + if [[ "${fspkgs}" == *"reiserfsprogs"* ]]; then + options+=("reiserfsprogs" "" on) + else + options+=("reiserfsprogs" "" off) + fi + options+=("lvm2" "" off) + options+=("dmraid" "" off) + sel=$(whiptail --backtitle "${apptitle}" --title "${txtinstallhyperbolafilesystems}" --checklist "" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ ! "$?" = "0" ]; then + return 1 + fi + for itm in $sel; do + pkgs="$pkgs $(echo $itm | sed 's/"//g')" + done + + if [[ ${cpl} == 1 ]]; then + sed -i '/^\s*$/d' /tmp/hyperfi-custom-package-list + sed -i '/^#/ d' /tmp/hyperfi-custom-package-list + options=() + while read pkg; do + options+=("${pkg}" "" on) + done < /tmp/hyperfi-custom-package-list + sel=$(whiptail --backtitle "${apptitle}" --title "${txtinstallhyperbolacustompackagelist}" --checklist "" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ ! "$?" = "0" ]; then + return 1 + fi + for itm in $sel; do + pkgs="$pkgs $(echo $itm | sed 's/"//g')" + done + fi + + clear + echo "pacstrap /mnt ${pkgs}" + pacstrap /mnt ${pkgs} + pressanykey +} + +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+=("${txtsetfont}" "/etc/vconsole.conf (${txtoptional})") + options+=("${txtsetlocale}" "/etc/locale.conf, /etc/locale.gen") + options+=("${txtsettime}" "/etc/localtime") + options+=("${txtsetrootpassword}" "") + options+=("${txtgenerate//%1/fstab}" "") + if [ "${luksdrive}" = "1" ]; then + options+=("${txtgenerate//%1/crypttab}" "") + fi + if [ "${luksroot}" = "1" ]; then + options+=("${txtgenerate//%1/mkinitcpio.conf-luks}" "(encrypt hooks)") + fi + if [ "${isnvme}" = "1" ]; then + options+=("${txtgenerate//%1/mkinitcpio.conf-nvme}" "(nvme module)") + fi + options+=("${txtedit//%1/fstab}" "(${txtoptional})") + options+=("${txtedit//%1/crypttab}" "(${txtoptional})") + options+=("${txtedit//%1/mkinitcpio.conf}" "(${txtoptional})") + options+=("${txtedit//%1/mirrorlist}" "(${txtoptional})") + options+=("${txtbootloader}" "") + options+=("${txtextrasmenu}" "") + options+=("hyperdi" "${txthyperdidesc}") + sel=$(whiptail --backtitle "${apptitle}" --title "${txtarchinstallmenu}" --menu "" --cancel-button "${txtback}" --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}" + ;; + "${txtsetfont}") + archsetfont + nextitem="${txtsetlocale}" + ;; + "${txtsetlocale}") + archsetlocale + nextitem="${txtsettime}" + ;; + "${txtsettime}") + archsettime + nextitem="${txtsetrootpassword}" + ;; + "${txtsetrootpassword}") + archsetrootpassword + nextitem="${txtgenerate//%1/fstab}" + ;; + "${txtgenerate//%1/fstab}") + archgenfstabmenu + if [ "${luksdrive}" = "1" ]; then + nextitem="${txtgenerate//%1/crypttab}" + else + if [ "${luksroot}" = "1" ]; then + nextitem="${txtgenerate//%1/mkinitcpio.conf-luks}" + else + if [ "${isnvme}" = "1" ]; then + nextitem="${txtgenerate//%1/mkinitcpio.conf-nvme}" + else + nextitem="${txtbootloader}" + fi + fi + fi + ;; + "${txtgenerate//%1/crypttab}") + archgencrypttab + if [ "${luksroot}" = "1" ]; then + nextitem="${txtgenerate//%1/mkinitcpio.conf-luks}" + else + if [ "${isnvme}" = "1" ]; then + nextitem="${txtgenerate//%1/mkinitcpio.conf-nvme}" + else + nextitem="${txtbootloader}" + fi + fi + ;; + "${txtgenerate//%1/mkinitcpio.conf-luks}") + archgenmkinitcpioluks + if [ "${isnvme}" = "1" ]; then + nextitem="${txtgenerate//%1/mkinitcpio.conf-nvme}" + else + nextitem="${txtbootloader}" + fi + ;; + "${txtgenerate//%1/mkinitcpio.conf-nvme}") + archgenmkinitcpionvme + nextitem="${txtbootloader}" + ;; + "${txtedit//%1/fstab}") + ${EDITOR} /mnt/etc/fstab + nextitem="${txtedit//%1/fstab}" + ;; + "${txtedit//%1/crypttab}") + ${EDITOR} /mnt/etc/crypttab + nextitem="${txtedit//%1/crypttab}" + ;; + "${txtedit//%1/mkinitcpio.conf}") + archeditmkinitcpio + nextitem="${txtedit//%1/mkinitcpio.conf}" + ;; + "${txtedit//%1/mirrorlist}") + ${EDITOR} /mnt/etc/pacman.d/mirrorlist + nextitem="${txtedit//%1/mirrorlist}" + ;; + "${txtbootloader}") + archbootloadermenu + nextitem="${txtextrasmenu}" + ;; + "${txtextrasmenu}") + archextrasmenu + nextitem="hyperdi" + ;; + "hyperdi") + installhyperdi + nextitem="hyperdi" + ;; + esac + archmenu "${nextitem}" + fi +} + +archchroot(){ + echo "arch-chroot /mnt /root" + cp ${0} /mnt/root + chmod 755 /mnt/root/$(basename "${0}") + arch-chroot /mnt /root/$(basename "${0}") --chroot ${1} ${2} + rm /mnt/root/$(basename "${0}") + echo "exit" +} + + +archsethostname(){ + hostname=$(whiptail --backtitle "${apptitle}" --title "${txtsethostname}" --inputbox "" 0 0 "hyperbola" 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + clear + echo "echo \"${hostname}\" > /mnt/etc/hostname" + echo "${hostname}" > /mnt/etc/hostname + pressanykey + fi +} + +archsetkeymap(){ + #items=$(localectl list-keymaps) + #options=() + #for item in ${items}; do + # options+=("${item}" "") + #done + items=$(find /usr/share/kbd/keymaps/ -type f -printf "%f\n" | sort -V) + options=() + defsel="" + for item in ${items}; do + if [ "${item%%.*}" == "${keymap}" ]; then + defsel="${item%%.*}" + fi + options+=("${item%%.*}" "") + done + keymap=$(whiptail --backtitle "${apptitle}" --title "${txtsetkeymap}" --menu "" --default-item "${defsel}" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + clear + echo "echo \"KEYMAP=${keymap}\" > /mnt/etc/vconsole.conf" + echo "KEYMAP=${keymap}" > /mnt/etc/vconsole.conf + pressanykey + fi +} + +archsetfont(){ + items=$(find /usr/share/kbd/consolefonts/*.psfu.gz -printf "%f\n") + + options=() + for item in ${items}; do + options+=("${item%%.*}" "") + done + vcfont=$(whiptail --backtitle "${apptitle}" --title "${txtsetfont} (${txtoptional})" --menu "" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + clear + echo "echo \"FONT=${vcfont}\" >> /mnt/etc/vconsole.conf" + echo "FONT=${vcfont}" >> /mnt/etc/vconsole.conf + pressanykey + fi +} + +archsetlocale(){ + items=$(ls /usr/share/i18n/locales) + options=() + defsel="" + for item in ${items}; do + if [ "${defsel}" == "" ]&&[ "${keymap::2}" == "${item::2}" ]; then + defsel="${item}" + fi + options+=("${item}" "") + done + locale=$(whiptail --backtitle "${apptitle}" --title "${txtsetlocale}" --menu "" --default-item "${defsel}" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + clear + echo "echo \"LANG=${locale}.UTF-8\" > /mnt/etc/locale.conf" + echo "LANG=${locale}.UTF-8" > /mnt/etc/locale.conf + echo "echo \"LC_COLLATE=C\" >> /mnt/etc/locale.conf" + echo "LC_COLLATE=C" >> /mnt/etc/locale.conf + echo "sed -i '/#${locale}.UTF-8/s/^#//g' /mnt/etc/locale.gen" + sed -i '/#'${locale}'.UTF-8/s/^#//g' /mnt/etc/locale.gen + archchroot setlocale + pressanykey + fi +} +archsetlocalechroot(){ + echo "locale-gen" + locale-gen + exit +} + +archsettime(){ + items=$(ls -l /mnt/usr/share/zoneinfo/ | grep '^d' | gawk -F':[0-9]* ' '/:/{print $2}') + 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 + + clear + echo "ln -sf /mnt/usr/share/zoneinfo/${timezone} /mnt/etc/localtime" + ln -sf /usr/share/zoneinfo/${timezone} /mnt/etc/localtime + pressanykey + + options=() + options+=("UTC" "") + options+=("Local" "") + sel=$(whiptail --backtitle "${apptitle}" --title "${txtsettime}" --menu "${txthwclock}" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ ! "$?" = "0" ]; then + return 1 + fi + + clear + case ${sel} in + "${txthwclockutc}") + archchroot settimeutc + ;; + "${txthwclocklocal}") + archchroot settimelocal + ;; + esac + + pressanykey + +} +archsettimeutcchroot(){ + echo "hwclock --systohc --utc" + hwclock --systohc --utc + exit +} +archsettimelocalchroot(){ + echo "hwclock --systohc --localtime" + hwclock --systohc --localtime + exit +} + +archsetrootpassword(){ + clear + archchroot setrootpassword + pressanykey +} +archsetrootpasswordchroot(){ + echo "passwd root" + passed=1 + while [[ ${passed} != 0 ]]; do + passwd root + passed=$? + done + exit +} + +archgenfstabmenu(){ + options=() + options+=("UUID" "genfstab -U") + options+=("LABEL" "genfstab -L") + options+=("PARTUUID" "genfstab -t PARTUUID") + options+=("PARTLABEL" "genfstab -t PARTLABEL") + sel=$(whiptail --backtitle "${apptitle}" --title "${txtgenerate//%1/fstab}" --menu "" --cancel-button "${txtback}" --default-item "${nextitem}" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + case ${sel} in + "UUID") + clear + echo "genfstab -U -p /mnt > /mnt/etc/fstab" + genfstab -U -p /mnt > /mnt/etc/fstab + ;; + "LABEL") + clear + echo "genfstab -L -p /mnt > /mnt/etc/fstab" + genfstab -L -p /mnt > /mnt/etc/fstab + ;; + "PARTUUID") + clear + echo "genfstab -t PARTUUID -p /mnt > /mnt/etc/fstab" + genfstab -t PARTUUID -p /mnt > /mnt/etc/fstab + ;; + "PARTLABEL") + clear + echo "genfstab -t PARTLABEL -p /mnt > /mnt/etc/fstab" + genfstab -t PARTLABEL -p /mnt > /mnt/etc/fstab + ;; + esac + fi + pressanykey +} + +archgencrypttab(){ + clear + echo "echo -e \"${crypttab}\" >> /mnt/etc/crypttab" + echo -e "${crypttab}" >> /mnt/etc/crypttab + pressanykey +} + +archgenmkinitcpioluks(){ + clear + echo "sed -i \"s/block filesystems/block encrypt filesystems/g\" /mnt/etc/mkinitcpio.conf" + sed -i "s/block filesystems/block encrypt filesystems/g" /mnt/etc/mkinitcpio.conf + archchroot genmkinitcpio + pressanykey +} +archgenmkinitcpionvme(){ + clear + echo "sed -i \"s/MODULES=()/MODULES=(nvme)/g\" /mnt/etc/mkinitcpio.conf" + sed -i "s/MODULES=()/MODULES=(nvme)/g" /mnt/etc/mkinitcpio.conf + archchroot genmkinitcpio + pressanykey +} + +archeditmkinitcpio(){ + ${EDITOR} /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(){ + echo "mkinitcpio -p linux-libre-lts" + mkinitcpio -p linux-libre-lts + exit +} + + +archbootloadermenu(){ + options=() + options+=("grub" "") + if [ "${efimode}" == "1" ]; then + options+=("refind" "") + fi + if [ "${efimode}" != "2" ]; then + options+=("syslinux" "") + fi + sel=$(whiptail --backtitle "${apptitle}" --title "${txtbootloadermenu}" --menu "" --cancel-button "${txtback}" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + case ${sel} in + "grub") archbootloadergrubmenu;; + "refind") archbootloaderrefindmenu;; + "syslinux")archbootloadersyslinuxbmenu;; + esac + fi +} + + +archbootloadergrubmenu(){ + if [ "${1}" = "" ]; then + nextblitem="." + else + nextblitem=${1} + fi + options=() + options+=("${txtinstall//%1/grub}" "pacstrap grub (efibootmgr), grub-mkconfig") + options+=("${txtedit//%1/grub}" "(${txtoptional})") + options+=("${txtinstall//%1/bootloader}" "grub-install") + sel=$(whiptail --backtitle "${apptitle}" --title "${txtbootloadergrubmenu}" --menu "" --cancel-button "${txtback}" --default-item "${nextblitem}" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + case ${sel} in + "${txtinstall//%1/grub}") + archgrubinstall + nextblitem="${txtinstall//%1/bootloader}" + ;; + "${txtedit//%1/grub}") + ${EDITOR} /mnt/etc/default/grub + if (whiptail --backtitle "${apptitle}" --title "${txtedit//%1/grub}" --yesno "${txtrungrubmakeconfig}" 0 0) ; then + clear + archchroot grubinstall + pressanykey + fi + nextblitem="${txtinstall//%1/bootloader}" + ;; + "${txtinstall//%1/bootloader}") + archgrubinstallbootloader + nextblitem="${txtinstall//%1/bootloader}" + ;; + esac + archbootloadergrubmenu "${nextblitem}" + fi +} + +archgrubinstall(){ + clear + echo "pacstrap /mnt grub" + pacstrap /mnt grub + pressanykey + + if [ "${eficomputer}" == "1" ]; then + if [ "${efimode}" == "1" ]||[ "${efimode}" == "2" ]; then + if (whiptail --backtitle "${apptitle}" --title "${txtinstall//%1/efibootmgr}" --yesno "${txtefibootmgr}" 0 0) ; then + clear + echo "pacstrap /mnt efibootmgr" + pacstrap /mnt efibootmgr + pressanykey + fi + else + if (whiptail --backtitle "${apptitle}" --title "${txtinstall//%1/efibootmgr}" --yesno "${txtefibootmgr}" --defaultno 0 0) ; then + clear + echo "pacstrap /mnt efibootmgr" + pacstrap /mnt efibootmgr + pressanykey + fi + fi + fi + + if [ "${luksroot}" = "1" ]; then + if (whiptail --backtitle "${apptitle}" --title "${txtinstall//%1/grub}" --yesno "${txtgrubluksdetected}" 0 0) ; then + clear + echo "sed -i /GRUB_CMDLINE_LINUX=/c\GRUB_CMDLINE_LINUX=\\\"cryptdevice=/dev/disk/by-uuid/${luksrootuuid}:root\\\" /mnt/etc/default/grub" + sed -i /GRUB_CMDLINE_LINUX=/c\GRUB_CMDLINE_LINUX=\"cryptdevice=/dev/disk/by-uuid/${luksrootuuid}:root\" /mnt/etc/default/grub + pressanykey + fi + fi + + clear + archchroot grubinstall + pressanykey +} +archgrubinstallchroot(){ + echo "mkdir /boot/grub" + echo "grub-mkconfig -o /boot/grub/grub.cfg" + mkdir /boot/grub + grub-mkconfig -o /boot/grub/grub.cfg + exit +} + +archgrubinstallbootloader(){ + device=$( selectdisk "${txtinstall//%1/bootloader}" ) + if [ "$?" = "0" ]; then + if [ "${eficomputer}" == "1" ]; 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 "${txtback}" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + clear + case ${sel} in + "BIOS") archchroot grubbootloaderinstall ${device};; + "EFI") archchroot grubbootloaderefiinstall ${device};; + "BIOS+EFI") archchroot grubbootloaderefiusbinstall ${device};; + esac + pressanykey + fi + else + clear + archchroot grubbootloaderinstall ${device} + pressanykey + fi + fi +} +archgrubinstallbootloaderchroot(){ + if [ ! "${1}" = "none" ]; then + echo "grub-install --target=i386-pc --recheck ${1}" + grub-install --target=i386-pc --recheck ${1} + fi + exit +} +archgrubinstallbootloaderefichroot(){ + if [ ! "${1}" = "none" ]; then + echo "grub-install --target=x86_64-efi --efi-directory=/boot --recheck ${1}" + grub-install --target=x86_64-efi --efi-directory=/boot --recheck ${1} + isvbox=$(lspci | grep "VirtualBox G") + if [ "${isvbox}" ]; then + echo "VirtualBox detected, creating startup.nsh..." + echo "\EFI\arch\grubx64.efi" > /boot/startup.nsh + fi + fi + exit +} +archgrubinstallbootloaderefiusbchroot(){ + if [ ! "${1}" = "none" ]; then + echo "grub-install --target=i386-pc --recheck ${1}" + grub-install --target=i386-pc --recheck ${1} + echo "grub-install --target=x86_64-efi --efi-directory=/boot --removable --recheck ${1}" + grub-install --target=x86_64-efi --efi-directory=/boot --removable --recheck ${1} + isvbox=$(lspci | grep "VirtualBox G") + if [ "${isvbox}" ]; then + echo "VirtualBox detected, creating startup.nsh..." + echo "\EFI\arch\grubx64.efi" > /boot/startup.nsh + fi + fi + exit +} + + +archbootloadersyslinuxbmenu(){ + if [ "${1}" = "" ]; then + nextblitem="." + else + nextblitem=${1} + fi + options=() + options+=("${txtinstall//%1/syslinux}" "pacstrap syslinux (gptfdisk,mtools)") + options+=("${txtedit//%1/syslinux}" "(${txtoptional})") + options+=("${txtinstall//%1/bootloader}" "syslinux-install_update") + sel=$(whiptail --backtitle "${apptitle}" --title "${txtbootloadersyslinuxmenu}" --menu "" --cancel-button "${txtback}" --default-item "${nextblitem}" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + case ${sel} in + "${txtinstall//%1/syslinux}") + archsyslinuxinstall + nextblitem="${txtinstall//%1/bootloader}" + ;; + "${txtedit//%1/syslinux}") + ${EDITOR} /mnt/boot/syslinux/syslinux.cfg + nextblitem="${txtinstall//%1/bootloader}" + ;; + "${txtinstall//%1/bootloader}") + archsyslinuxinstallbootloader + nextblitem="${txtinstall//%1/bootloader}" + ;; + esac + archbootloadersyslinuxbmenu "${nextblitem}" + fi +} +archsyslinuxinstall(){ + clear + + if [ "${efimode}" == "1" ]||[ "${efimode}" == "2" ]; then + echo "${txtsyslinuxaddefibootmgr}" + additionalpkg=${additionalpkg}"efibootmgr " + fi + + if [ "${isnvme}" = "1" ]; then + if [ "$(parted ${realrootdev::(-2)} print|grep gpt)" != "" ]; then + echo "${txtsyslinuxaddgptfdisk}" + additionalpkg=${additionalpkg}"gptfdisk " + fi + else + if [ "$(parted ${realrootdev::8} print|grep gpt)" != "" ]; then + echo "${txtsyslinuxaddgptfdisk}" + additionalpkg=${additionalpkg}"gptfdisk " + fi + fi + + if [ "${bootdev}" != "" ]; then + if [ "$(parted ${bootdev} print|grep fat)" != "" ]; then + echo "${txtsyslinuxaddmtools}" + additionalpkg=${additionalpkg}"mtools " + fi + fi + + echo "pacstrap /mnt syslinux ${additionalpkg}" + pacstrap /mnt syslinux ${additionalpkg} + pressanykey + + clear + echo "Updating /boot/syslinux/syslinux.cfg" + if [ "${luksroot}" = "1" ]; then + echo "sed -i \"/APPEND\ root=/c\ APPEND root=/dev/mapper/root cryptdevice=${realrootdev}:root rw\" /mnt/boot/syslinux/syslinux.cfg" + sed -i "/APPEND\ root=/c\ APPEND root=/dev/mapper/root cryptdevice=${realrootdev}:root\ rw" /mnt/boot/syslinux/syslinux.cfg + else + echo "sed -i \"/APPEND\ root=/c\ APPEND root=${rootdev} rw\" /mnt/boot/syslinux/syslinux.cfg" + sed -i "/APPEND\ root=/c\ APPEND root=${rootdev}\ rw" /mnt/boot/syslinux/syslinux.cfg + fi + + pressanykey +} +archsyslinuxinstallbootloader(){ + clear + if [ "${efimode}" == "1" ]||[ "${efimode}" == "2" ]; then + archchroot syslinuxbootloaderefiinstall ${bootdev} + else + archchroot syslinuxbootloaderinstall ${bootdev} + fi + pressanykey +} +archsyslinuxinstallbootloaderchroot(){ + if [ ! "${1}" = "none" ]; then + echo "syslinux-install_update -i -a -m" + syslinux-install_update -i -a -m + fi + exit +} +archsyslinuxinstallbootloaderefichroot(){ + if [ ! "${1}" = "none" ]; then + echo "cp -r /usr/lib/syslinux/efi64/* /boot/syslinux" + cp -r /usr/lib/syslinux/efi64/* /boot/syslinux + if [ "${1::8}" == "/dev/nvm" ]; then + echo "efibootmgr --create --disk ${1::(-2)} --part ${1:(-1)} --loader /syslinux/syslinux.efi --label "Syslinux" --verbose" + efibootmgr --create --disk ${1::(-2)} --part ${1:(-1)} --loader /syslinux/syslinux.efi --label "Syslinux" --verbose + else + echo "efibootmgr --create --disk ${1::8} --part ${1:(-1)} --loader /syslinux/syslinux.efi --label "Syslinux" --verbose" + efibootmgr --create --disk ${1::8} --part ${1:(-1)} --loader /syslinux/syslinux.efi --label "Syslinux" --verbose + fi + isvbox=$(lspci | grep "VirtualBox G") + if [ "${isvbox}" ]; then + echo "VirtualBox detected, creating startup.nsh..." + echo "\syslinux\syslinux.efi" > /boot/startup.nsh + fi + fi + exit +} + + +archbootloaderrefindmenu(){ + if [ "${1}" = "" ]; then + nextblitem="." + else + nextblitem=${1} + fi + options=() + options+=("${txtinstall//%1/refind}" "pacstrap refind-efi") + options+=("${txtedit//%1/refind_linux.conf}" "(${txtoptional})") + sel=$(whiptail --backtitle "${apptitle}" --title "${txtbootloaderrefindmenu}" --menu "" --cancel-button "${txtback}" --default-item "${nextblitem}" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + case ${sel} in + "${txtinstall//%1/refind}") + archrefindinstall + nextblitem="${txtedit//%1/refind_linux.conf}" + ;; + "${txtedit//%1/refind_linux.conf}") + ${EDITOR} /mnt/boot/refind_linux.conf + nextblitem="${txtedit//%1/refind_linux.conf}" + ;; + esac + archbootloaderrefindmenu "${nextblitem}" + fi + +} +archrefindinstall(){ + clear + + echo "pacstrap /mnt refind-efi" + echo "archchroot refindbootloaderinstall ${realrootdev}" + echo "echo \"\\\"Hyperbola GNU+Linux-libre \\\" \\\"root=UUID=${rootuuid} rw add_efi_memmap\\\"\" > /mnt/boot/refind_linux.conf" + echo "echo \"\\\"Hyperbola GNU+Linux-libre Fallback\\\" \\\"root=UUID=${rootuuid} rw add_efi_memmap initrd=/initramfs-linux-fallback.img\\\"\" >> /mnt/boot/refind_linux.conf" + + pacstrap /mnt refind-efi + archchroot refindbootloaderinstall ${realrootdev} + rootuuid=$(blkid -s UUID -o value ${realrootdev}) + echo "\"Hyperbola GNU+Linux-libre \" \"root=UUID=${rootuuid} rw add_efi_memmap\"" > /mnt/boot/refind_linux.conf + echo "\"Hyperbola GNU+Linux-libre Fallback\" \"root=UUID=${rootuuid} rw add_efi_memmap initrd=/initramfs-linux-fallback.img\"" >> /mnt/boot/refind_linux.conf + pressanykey +} +archrefindinstallchroot(){ + #--usedefault /dev/sdXY --alldrivers + echo "refind-install" + refind-install + isvbox=$(lspci | grep "VirtualBox G") + if [ "${isvbox}" ]; then + echo "VirtualBox detected, creating startup.nsh..." + echo "\EFI\refind\refind_x64.efi" > /boot/startup.nsh + fi +} + + +archextrasmenu(){ + pkgs="" + options=() + options+=("nano" "" on) + options+=("vim" "" on) + options+=("dhcpcd" "" on) + sel=$(whiptail --backtitle "${apptitle}" --title "${txtextrasmenu}" --checklist "" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ ! "$?" = "0" ]; then + return 1 + fi + for itm in $sel; do + pkgs="$pkgs $(echo $itm | sed 's/"//g')" + done + clear + echo "pacstrap /mnt ${pkgs}" + pacstrap /mnt ${pkgs} + if [[ "${pkgs}" == *"dhcpcd"* ]]; then + archchroot enabledhcpcd + fi + pressanykey +} +archenabledhcpcdchroot(){ + echo "rc-update add dhcpcd default" + rc-update add dhcpcd default + exit +} + +installhyperdi(){ + txtinstallhyperdi="Hyperbola GNU+Linux-libre Desktop Install (hyperdi) 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\nHyperbola GNU+Linux-libre Desktop Install as two dependencies : wget and libnewt.\n\npacstrap wget libnewt ?" + if(whiptail --backtitle "${apptitle}" --title "hyperdi" --yesno "${txtinstallhyperdi}" 0 0); then + clear + echo "pacstrap /mnt wget libnewt" + pacstrap /mnt wget libnewt + fi + if [ "$?" = "0" ]; then + options=() + options+=("${txthyperdiinstallandlaunch}" "") + options+=("${txthyperdilaunch}" "") + options+=("${txthyperdiinstall}" "") + sel=$(whiptail --backtitle "${apptitle}" --title "${txthyperdimenu}" --menu "" --cancel-button "${txtback}" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + case ${sel} in + "${txthyperdiinstallandlaunch}") archchroot hyperdiinstallandlaunch;; + "${txthyperdilaunch}") archchroot hyperdilaunch;; + "${txthyperdiinstall}") + clear + archchroot hyperdiinstall + pressanykey + ;; + esac + fi + fi +} +hyperdidownload(){ + txtselectserver="Select source server :" + txtback="Back" + options=() + options+=("sourceforge.net" "recommended") + options+=("github.com" "") + sel=$(whiptail --backtitle "${apptitle}" --title "${txtselectserver}" --menu "" --cancel-button "${txtback}" 0 0 0 \ + "${options[@]}" \ + 3>&1 1>&2 2>&3) + if [ "$?" = "0" ]; then + case ${sel} in + "sourceforge.net") + hyperdiurl=hyperdi.sourceforge.net/hyperdi + ;; + "github.com") + hyperdiurl=matmoul.github.io/hyperdi >hyperdi + ;; + esac + fi + echo "curl -L ${hyperdiurl} >hyperdi" + curl -L ${hyperdiurl} >hyperdi +} +hyperdiinstallandlaunchchroot(){ + cd + hyperdidownload + sh hyperdi -i + hyperdi --chroot + exit +} +hyperdilaunchchroot(){ + cd + hyperdidownload + sh hyperdi --chroot + rm hyperdi + exit +} +hyperdiinstallchroot(){ + cd + hyperdidownload + sh hyperdi -i + exit +} +# -------------------------------------------------------- + + + +# -------------------------------------------------------- +pressanykey(){ + read -n1 -p "${txtpressanykey}" +} + +loadstrings(){ + + locale=en_US.UTF-8 + #font= + + txtexit="Exit" + txtback="Back" + txtignore="Ignore" + + txtselectserver="Select source server :" + + txtmainmenu="Main Menu" + txtlanguage="Language" + txtsetkeymap="Set Keyboard Layout" + txteditor="Editor" + 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" + txtunmount="Unmount" + 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" + txtcreateluksdevice="Create luks device :" + txtopenluksdevice="Open luks device :" + txtluksdevicecreated="luks device created !" + + txtinstallmenu="Install Menu" + + txtarchinstallmenu="Arch Install Menu" + + txtselectmirrorsbycountry="Select mirrors by country" + txtselectcountry="Select country" + txteditmirrorlist="Edit mirrorlist" + txtinstallhyperbola="Install Hyperbola GNU+Linux-libre" + txtinstallhyperbolakernel="Kernel" + txtinstallhyperbolafirmwares="Firmwares" + txtinstallhyperbolafilesystems="File Systems" + txtinstallhyperbolacustompackagelist="Custom Package List" + txtconfighyperbola="Config Hyperbola GNU+Linux-libre" + + txtsethostname="Set Computer Name" + txtsetfont="Set Font" + txtsetlocale="Set Locale" + txtsettime="Set Time" + txtsetrootpassword="Set root password" + + txthwclock="Hardware clock :" + txthwclockutc="UTC" + txthwclocklocal="Local" + + txtbootloader="Bootloader" + txtbootloadermenu="Choose your bootloader" + + txtefibootmgr="efibootmgr is required for EFI computers." + + txtbootloadergrubmenu="Grub Install Menu" + txtrungrubmakeconfig="Run grub-mkconfig ?" + txtgrubluksdetected="Encrypted root partion !\n\nAdd cryptdevice= to GRUB_CMDLINE_LINUX in /etc/default/grub ?" + + txtbootloadersyslinuxmenu="Syslinux Install Menu" + txtsyslinuxaddefibootmgr="EFI install require efibootmgr" + txtsyslinuxaddgptfdisk="GPT disk require gptfdisk" + txtsyslinuxaddmtools="FAT boot part require mtools" + + txtbootloaderrefindmenu="rEFInd Install Menu" + + txtextrasmenu="Extras" + + 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." + + txthyperdidesc="Full desktop install script" + txtinstallhyperdi="Hyperbola GNU+Linux-libre Desktop Install (hyperdi) 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\nHyperbola GNU+Linux-libre Desktop Install as two dependencies : wget and libnewt.\n\npacstrap wget libnewt ?" + txthyperdiinstallandlaunch="Install and run hyperdi" + txthyperdiinstall="Install hyperdi" + txthyperdilaunch="Launch hyperdi" +} + +# -------------------------------------------------------- +# -------------------------------------------------------- +while (( "$#" )); do + case ${1} in + --help) + echo "hyperfi" + echo "------" + echo "-cpl | --custom-package-list url Set custom package list url" + echo "-sf | --skip-font Skip setfont from language files" + echo "-efiX -efi0 : disable EFI, -efi1 efi inst, -efi2 efi hybrid inst" + echo "-t | --test codebergname ghbranch Test hyperfi script and language" + exit 0 + ;; + -cpl | --custom-package-list) + curl -L ${2} > /tmp/hyperfi-custom-package-list + if [[ "$?" != "0" ]]; then + echo "Error downloading custom package list" + exit 0 + fi + cpl=1 + ;; + -sf | --skip-font) skipfont=1;; + -t | --test) + wget -O hyperfi https://codeberg.org/${2}/hyperfi/raw/branch/${3}/hyperfi + sh hyperfi -tt ${2} ${3} + exit 0 + ;; + -tt) baseurl="https://codeberg.org/${2}/hyperfi/raw/branch/${3}";; + -efi0) + efimode=0 + ;; + -efi1) + eficomputer=1 + efimode=1 + ;; + -efi2) + eficomputer=1 + efimode=2 + ;; + --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;; + 'grubinstall') archgrubinstallchroot;; + 'grubbootloaderinstall') archgrubinstallbootloaderchroot ${args};; + 'grubbootloaderefiinstall') archgrubinstallbootloaderefichroot ${args};; + 'grubbootloaderefiusbinstall') archgrubinstallbootloaderefiusbchroot ${args};; + 'syslinuxbootloaderinstall') archsyslinuxinstallbootloaderchroot ${args};; + 'syslinuxbootloaderefiinstall') archsyslinuxinstallbootloaderefichroot ${args};; + 'refindbootloaderinstall') archrefindinstallchroot ${args};; + 'hyperdiinstallandlaunch') hyperdiinstallandlaunchchroot;; + 'hyperdiinstall') hyperdiinstallchroot;; + 'hyperdilaunch') hyperdilaunchchroot;; + esac +else + pacman -S --needed arch-install-scripts wget libnewt + dmesg |grep efi: > /dev/null + if [ "$?" == "1" ]; then + if [ "${eficomputer}" != "1" ]; then + eficomputer=0 + fi + else + eficomputer=1 + if [ "${efimode}" == "" ]; then + efimode=1 + fi + fi + loadstrings + EDITOR=nano + mainmenu +fi + +exit 0 +# -------------------------------------------------------- diff --git a/makerelease b/makerelease deleted file mode 100755 index 86851e1..0000000 --- a/makerelease +++ /dev/null @@ -1,111 +0,0 @@ -#!/bin/bash - -prjname=archfi -version=$(date +"%Y.%m.%d.%H.%M.%S") -branch=$(git rev-parse --abbrev-ref HEAD) - - -ssh -T git@github.com -if [ ! "$?" = "1" ]; then - echo "No Github ssh key loaded exiting..." - exit 1 -fi - -scp "matmoul@web.sourceforge.net:/home/frs/project/$prjname/release/2018.09.04.01.26.38/README.txt" /dev/null - -if [ ! "$?" = "0" ]; then - echo "No Sourceforge ssh key loaded exiting..." - exit 1 -fi - - -clear -read -p "Current branch is $branch. Continue ? (y/N)" choice -case "$choice" in - n|N|'' ) - echo "cancel build !" - exit 1 - ;; - y|Y ) echo "Begin Build Release...";; - * ) - echo "cancel build !" - exit 1 - ;; -esac -echo "Building version $version..." -echo "" - -echo "Finalise archfi script..." -sed -i /apptitle=/c\apptitle=\""Arch Linux Fast Install (archfi) - Version: $version (GPLv3)"\" archfi -sed -i /baseurl=https://raw.githubusercontent.com/c\baseurl=https://raw.githubusercontent.com/MatMoul/archfi/master archfi - -echo "Make last commit..." -git commit -a -m "New Release : $version" - -if [ ! "$branch" = "master" ]; then - echo "Merge branch $branch to master..." - git checkout master - git pull - git merge $branch - - read -p "Delete branch $branch ? (y/N)" choice - case "$choice" in - y|Y ) - git branch -D $branch - ;; - esac -fi - -read -p "Push release ? (Y/n)" choice -case "$choice" in - n|N ) exit 1;; -esac - -git checkout master -echo "Push release..." -git push - - -read -p "Publish to server ? (Y/n)" choice -case "$choice" in - n|N ) exit 1;; -esac - -echo "Create index.html..." -fle=$(cat archfi) -git checkout gh-pages -git pull -echo "$fle" > index.html -chmod 640 index.html -git commit -a -m "New Release : $version" -echo "Push index.html..." -git push - -git checkout master -#Sourceforge : - -targetpath=.build/$version -mkdir -p $targetpath -cp -R * $targetpath - -echo "Finalise archfi script..." -sed -i "/baseurl=https:\/\/raw.githubusercontent.com\/MatMoul\/archfi/c\baseurl=http://downloads.sourceforge.net/project/archfi/release/$version" $targetpath/archfi - -echo "Publish release..." -scp -r $targetpath matmoul@web.sourceforge.net:/home/frs/project/$prjname/release/ - -echo "Update redirect page..." -pubfile=.build/index.php -echo " $pubfile -echo "header(\"Location: http://downloads.sourceforge.net/project/$prjname/release/$version/$prjname\");" >> $pubfile -echo "exit;" >> $pubfile -echo "?>" >> $pubfile -scp $pubfile matmoul@web.sourceforge.net:/home/project-web/$prjname/htdocs/$prjname/index.php - -rm -R .build - -if [ ! "$branch" = "master" ]; then - git checkout $branch - git merge master - git push -fi diff --git a/samples/custompackagelist b/samples/custompackagelist index 01c7e3f..c2cb280 100644 --- a/samples/custompackagelist +++ b/samples/custompackagelist @@ -3,7 +3,7 @@ # How to use : # Store your own file on a web server -# Launch archfi with : +# Launch hyperfi with : # archfi -cpl url_of_the_file # Some packages :