better error handling installer + updated servers + more
This commit is contained in:
parent
5649b95643
commit
8b920322ba
23 changed files with 1148 additions and 1193 deletions
|
@ -1,21 +0,0 @@
|
|||
# Server list generated by rankmirrors on 2022-06-09
|
||||
Server = https://mirrors.sjtug.sjtu.edu.cn/archlinux/$repo/os/$arch
|
||||
Server = https://mirrors.kernel.org/archlinux/$repo/os/$arch
|
||||
Server = https://mirror.redrock.team/archlinux/$repo/os/$arch
|
||||
Server = https://mirror.mijn.host/archlinux/$repo/os/$arch
|
||||
Server = https://mirrors.njupt.edu.cn/archlinux/$repo/os/$arch
|
||||
Server = https://america.mirror.pkgbuild.com/$repo/os/$arch
|
||||
Server = https://appuals.com/archlinux/$repo/os/$arch
|
||||
Server = https://arch-mirror.wtako.net/$repo/os/$arch
|
||||
Server = https://arch.hu.fo/archlinux/$repo/os/$arch
|
||||
Server = https://arch.jensgutermuth.de/$repo/os/$arch
|
||||
Server = https://arch.jsc.mx/$repo/os/$arch
|
||||
Server = https://arch.juline.tech/$repo/os/$arch
|
||||
Server = https://arch.lucassymons.net/$repo/os/$arch
|
||||
Server = https://arch.midov.pl/arch/$repo/os/$arch
|
||||
Server = https://arch.mirror.constant.com/$repo/os/$arch
|
||||
Server = https://arch.mirror.ivo.st/$repo/os/$arch
|
||||
Server = https://arch.mirror.zachlge.org/$repo/os/$arch
|
||||
Server = https://arch.mirrors.lavatech.top/$repo/os/$arch
|
||||
Server = https://arch.nimukaito.net/$repo/os/$arch
|
||||
Server = https://arch.tux.si/mirror/$repo/os/$arch
|
|
@ -1,7 +1,7 @@
|
|||
#!/usr/bin/env sh
|
||||
#!/usr/bin/env bash
|
||||
|
||||
rm -rf /mnt/post_install.sh
|
||||
sleep 3s
|
||||
sleep 1s
|
||||
clear
|
||||
echo -ne "
|
||||
__________________________________________________________________________________________________________
|
||||
|
@ -23,7 +23,10 @@ ________________________________________________________________________________
|
|||
echo "Metis Linux Installation Finished!!!"
|
||||
echo "Umounting all the drives"
|
||||
umount -R /mnt
|
||||
echo "And then rebooting in 10 seconds!!!"
|
||||
echo "After Reboot login your your username and password and type startx to start GUI."
|
||||
sleep 10s
|
||||
echo "If you've installed metis-os in a VM, it may be buggy or could perform abnormal, try disabling picom compositor."
|
||||
echo "AFTER REBOOTING RUN THE FOLLOWING COMMAND IN CASE OF NO NETWORK CONNECTIO: "
|
||||
echo "1. sudo ls -s /etc/runit/sv/NetworkManager /run/runit/service"
|
||||
echo "And then rebooting in 15 seconds!!!"
|
||||
sleep 20s
|
||||
reboot
|
||||
|
|
269
base/root-overlay/usr/local/bin/metis-chroot
Executable file
269
base/root-overlay/usr/local/bin/metis-chroot
Executable file
|
@ -0,0 +1,269 @@
|
|||
#!/bin/bash
|
||||
|
||||
shopt -s extglob
|
||||
|
||||
#!/hint/bash
|
||||
|
||||
#{{{ message
|
||||
|
||||
#set +u +o posix
|
||||
|
||||
# shellcheck disable=1091
|
||||
. /usr/share/makepkg/util.sh
|
||||
|
||||
export LANG=C
|
||||
|
||||
shopt -s extglob
|
||||
|
||||
if [[ -t 2 && "$TERM" != dumb ]]; then
|
||||
colorize
|
||||
else
|
||||
# shellcheck disable=2034
|
||||
declare -gr ALL_OFF='' BOLD='' BLUE='' GREEN='' RED='' YELLOW=''
|
||||
fi
|
||||
|
||||
stat_busy() {
|
||||
local mesg=$1; shift
|
||||
# shellcheck disable=2059
|
||||
printf "${GREEN}==>${ALL_OFF}${BOLD} ${mesg}...${ALL_OFF}" "$@" >&2
|
||||
}
|
||||
|
||||
stat_done() {
|
||||
# shellcheck disable=2059
|
||||
printf "${BOLD}done${ALL_OFF}\n" >&2
|
||||
}
|
||||
|
||||
lock_close() {
|
||||
local fd=$1
|
||||
exec {fd}>&-
|
||||
}
|
||||
|
||||
lock() {
|
||||
if ! [[ "/dev/fd/$1" -ef "$2" ]]; then
|
||||
mkdir -p -- "$(dirname -- "$2")"
|
||||
eval "exec $1>"'"$2"'
|
||||
fi
|
||||
if ! flock -n "$1"; then
|
||||
stat_busy "$3"
|
||||
flock "$1"
|
||||
stat_done
|
||||
fi
|
||||
}
|
||||
|
||||
slock() {
|
||||
if ! [[ "/dev/fd/$1" -ef "$2" ]]; then
|
||||
mkdir -p -- "$(dirname -- "$2")"
|
||||
eval "exec $1>"'"$2"'
|
||||
fi
|
||||
if ! flock -sn "$1"; then
|
||||
stat_busy "$3"
|
||||
flock -s "$1"
|
||||
stat_done
|
||||
fi
|
||||
}
|
||||
|
||||
_setup_workdir=false
|
||||
setup_workdir() {
|
||||
[[ -z ${WORKDIR:-} ]] && WORKDIR=$(mktemp -d --tmpdir "${0##*/}.XXXXXXXXXX")
|
||||
_setup_workdir=true
|
||||
trap 'trap_abort' INT QUIT TERM HUP
|
||||
trap 'trap_exit' EXIT
|
||||
}
|
||||
|
||||
trap_abort() {
|
||||
trap - EXIT INT QUIT TERM HUP
|
||||
abort
|
||||
}
|
||||
|
||||
trap_exit() {
|
||||
local r=$?
|
||||
trap - EXIT INT QUIT TERM HUP
|
||||
cleanup $r
|
||||
}
|
||||
|
||||
cleanup() {
|
||||
if [[ -n ${WORKDIR:-} ]] && $_setup_workdir; then
|
||||
rm -rf "$WORKDIR"
|
||||
fi
|
||||
exit "${1:-0}"
|
||||
}
|
||||
|
||||
abort() {
|
||||
error 'Aborting...'
|
||||
cleanup 255
|
||||
}
|
||||
|
||||
die() {
|
||||
(( $# )) && error "$@"
|
||||
cleanup 255
|
||||
}
|
||||
|
||||
#}}}
|
||||
|
||||
#!/hint/bash
|
||||
|
||||
#{{{ chroot
|
||||
|
||||
orig_argv=("$0" "$@")
|
||||
check_root() {
|
||||
local keepenv="$1"
|
||||
|
||||
(( EUID == 0 )) && return
|
||||
if type -P sudo >/dev/null; then
|
||||
# shellcheck disable=2154
|
||||
exec sudo --preserve-env="$keepenv" -- "${orig_argv[@]}"
|
||||
else
|
||||
# shellcheck disable=2154
|
||||
exec su root -c "$(printf ' %q' "${orig_argv[@]}")"
|
||||
fi
|
||||
}
|
||||
|
||||
is_btrfs() {
|
||||
[[ -e "$1" && "$(stat -f -c %T "$1")" == btrfs ]]
|
||||
}
|
||||
|
||||
is_subvolume() {
|
||||
[[ -e "$1" && "$(stat -f -c %T "$1")" == btrfs && "$(stat -c %i "$1")" == 256 ]]
|
||||
}
|
||||
|
||||
# is_same_fs() {
|
||||
# [[ "$(stat -c %d "$1")" == "$(stat -c %d "$2")" ]]
|
||||
# }
|
||||
|
||||
subvolume_delete_recursive() {
|
||||
local subvol
|
||||
|
||||
is_subvolume "$1" || return 0
|
||||
|
||||
while IFS= read -d $'\0' -r subvol; do
|
||||
if ! subvolume_delete_recursive "$subvol"; then
|
||||
return 1
|
||||
fi
|
||||
done < <(find "$1" -mindepth 1 -xdev -depth -inum 256 -print0)
|
||||
if ! btrfs subvolume delete "$1" &>/dev/null; then
|
||||
error "Unable to delete subvolume %s" "$subvol"
|
||||
return 1
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
# }}}
|
||||
|
||||
#!/hint/bash
|
||||
|
||||
#{{{ mount
|
||||
|
||||
ignore_error() {
|
||||
"$@" 2>/dev/null
|
||||
return 0
|
||||
}
|
||||
|
||||
trap_setup(){
|
||||
[[ $(trap -p EXIT) ]] && die 'Error! Attempting to overwrite existing EXIT trap'
|
||||
trap "$1" EXIT
|
||||
}
|
||||
|
||||
chroot_mount() {
|
||||
# msg2 "mount: [%s]" "$2"
|
||||
mount "$@" && CHROOT_ACTIVE_MOUNTS=("$2" "${CHROOT_ACTIVE_MOUNTS[@]}")
|
||||
}
|
||||
|
||||
chroot_add_resolv_conf() {
|
||||
local chrootdir=$1 resolv_conf=$1/etc/resolv.conf
|
||||
|
||||
[[ -e /etc/resolv.conf ]] || return 0
|
||||
|
||||
# Handle resolv.conf as a symlink to somewhere else.
|
||||
if [[ -L $chrootdir/etc/resolv.conf ]]; then
|
||||
# readlink(1) should always give us *something* since we know at this point
|
||||
# it's a symlink. For simplicity, ignore the case of nested symlinks.
|
||||
resolv_conf=$(readlink "$chrootdir/etc/resolv.conf")
|
||||
if [[ $resolv_conf = /* ]]; then
|
||||
resolv_conf=$chrootdir$resolv_conf
|
||||
else
|
||||
resolv_conf=$chrootdir/etc/$resolv_conf
|
||||
fi
|
||||
|
||||
# ensure file exists to bind mount over
|
||||
if [[ ! -f $resolv_conf ]]; then
|
||||
install -Dm644 /dev/null "$resolv_conf" || return 1
|
||||
fi
|
||||
elif [[ ! -e $chrootdir/etc/resolv.conf ]]; then
|
||||
# The chroot might not have a resolv.conf.
|
||||
return 0
|
||||
fi
|
||||
|
||||
chroot_mount /etc/resolv.conf "$resolv_conf" --bind
|
||||
}
|
||||
|
||||
chroot_mount_conditional() {
|
||||
local cond=$1; shift
|
||||
if eval "$cond"; then
|
||||
chroot_mount "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
chroot_setup(){
|
||||
local mnt="$1" os="$2" args='-t tmpfs -o nosuid,nodev,mode=0755'
|
||||
$os && args='--bind'
|
||||
chroot_mount_conditional "! mountpoint -q '$mnt'" "$mnt" "$mnt" --bind &&
|
||||
chroot_mount proc "$mnt/proc" -t proc -o nosuid,noexec,nodev &&
|
||||
chroot_mount sys "$mnt/sys" -t sysfs -o nosuid,noexec,nodev,ro &&
|
||||
ignore_error chroot_mount_conditional "[[ -d '$mnt/sys/firmware/efi/efivars' ]]" \
|
||||
efivarfs "$mnt/sys/firmware/efi/efivars" -t efivarfs -o nosuid,noexec,nodev &&
|
||||
chroot_mount udev "$mnt/dev" -t devtmpfs -o mode=0755,nosuid &&
|
||||
chroot_mount devpts "$mnt/dev/pts" -t devpts -o mode=0620,gid=5,nosuid,noexec &&
|
||||
chroot_mount shm "$mnt/dev/shm" -t tmpfs -o mode=1777,nosuid,nodev &&
|
||||
chroot_mount /run "$mnt/run" ${args} &&
|
||||
chroot_mount tmp "$mnt/tmp" -t tmpfs -o mode=1777,strictatime,nodev,nosuid
|
||||
}
|
||||
|
||||
chroot_api_mount() {
|
||||
CHROOT_ACTIVE_MOUNTS=()
|
||||
trap_setup chroot_api_umount
|
||||
chroot_setup "$1" false
|
||||
}
|
||||
|
||||
chroot_api_umount() {
|
||||
if (( ${#CHROOT_ACTIVE_MOUNTS[@]} )); then
|
||||
# msg2 "umount: [%s]" "${CHROOT_ACTIVE_MOUNTS[@]}"
|
||||
umount "${CHROOT_ACTIVE_MOUNTS[@]}"
|
||||
fi
|
||||
unset CHROOT_ACTIVE_MOUNTS
|
||||
}
|
||||
|
||||
#}}}
|
||||
|
||||
|
||||
|
||||
usage() {
|
||||
printf 'usage: %s chroot-dir [command]\n' "${0##*/}"
|
||||
printf ' -h Print this help message\n'
|
||||
printf '\n'
|
||||
printf " If 'command' is unspecified, %s will launch /bin/sh.\n" "${0##*/}"
|
||||
printf '\n'
|
||||
printf '\n'
|
||||
exit "$1"
|
||||
}
|
||||
|
||||
opts=':h'
|
||||
|
||||
while getopts ${opts} arg; do
|
||||
case "${arg}" in
|
||||
h|?) usage 0 ;;
|
||||
esac
|
||||
done
|
||||
shift $(( OPTIND - 1 ))
|
||||
|
||||
check_root
|
||||
|
||||
chrootdir=$1
|
||||
shift
|
||||
|
||||
[[ -d ${chrootdir} ]] || die "Can't create chroot on non-directory %s" "${chrootdir}"
|
||||
|
||||
chroot_api_mount "${chrootdir}" || die "failed to setup API filesystems in chroot %s" "${chrootdir}"
|
||||
chroot_add_resolv_conf "${chrootdir}"
|
||||
|
||||
SHELL=/bin/sh unshare --fork --pid chroot "${chrootdir}" "$@"
|
|
@ -1,3 +0,0 @@
|
|||
Server = https://pkgs.metislinux.org/$arch
|
||||
Server = https://metislinux.yogeshlamichhane.com.np/$arch
|
||||
Server = https://metislinux.iyamnabeen.xyz/$arch
|
|
@ -1,184 +1,308 @@
|
|||
#!/usr/bin/env sh
|
||||
echo -ne "
|
||||
__________________________________________________________________________________________________________
|
||||
| |
|
||||
| +-+-+-+-+-+ +-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+ |
|
||||
| |M|a|g|i|c| |M|e|t|i|s| |I|n|s|t|a|l|l|e|r| |
|
||||
| +-+-+-+-+-+ +-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+ |
|
||||
| |
|
||||
|---------------------------------------------------------------------------------------------------------|
|
||||
| Official Cli installer for metis linux. |
|
||||
|---------------------------------------------------------------------------------------------------------|
|
||||
| Install Metis Linus in few clicks |
|
||||
| Check: https://github.com/metis-os for details or visit https://metislinux.org |
|
||||
|---------------------------------------------------------------------------------------------------------|
|
||||
|_________________________________________________________________________________________________________|
|
||||
#!/usr/bin/env bash
|
||||
|
||||
"
|
||||
sleep 3s
|
||||
echo "Internet Connection is a must to begin."
|
||||
echo "Installing terminus font for better view."
|
||||
pacman -Sy --needed --noconfirm terminus-font
|
||||
setfont ter-v22b
|
||||
sleep 2s
|
||||
clear
|
||||
networkError() {
|
||||
sleep 2s
|
||||
clear
|
||||
echo -e "Couldnot connect to the internet.\nCheck your Internet Connection and please try again.\nExitting..."
|
||||
sleep 2s
|
||||
exit 1
|
||||
}
|
||||
|
||||
echo -ne "
|
||||
------------------------------------------------------------------------
|
||||
THIS WILL FORMAT AND DELETE ALL DATA ON THE DISK
|
||||
Please make sure you know what you are doing because
|
||||
after formating your disk there is no way to get data back
|
||||
------------------------------------------------------------------------
|
||||
"
|
||||
sleep 3s
|
||||
lsblk
|
||||
echo "Enter the drive to install metis linux on it."
|
||||
echo "Enter Drive (eg. sda or vda or nvme0n1): "
|
||||
read -r drive
|
||||
sleep 2s
|
||||
clear
|
||||
failed() {
|
||||
sleep 2s
|
||||
clear
|
||||
echo -e "Something went wrong.\nThe command could not be executed correctly!\nPlease try again.\nExitting..."
|
||||
sleep 2s
|
||||
exit 1
|
||||
}
|
||||
|
||||
lsblk
|
||||
echo "Choose a familier disk utility tool to partition your drive!"
|
||||
echo " 1. fdisk"
|
||||
echo " 2. cfdisk"
|
||||
echo " 3. gdisk"
|
||||
echo " 4. parted"
|
||||
read -r partitionutility
|
||||
installationError() {
|
||||
sleep 2s
|
||||
clear
|
||||
echo -e "Something went wrong.\nAll the packages couldn't be installed correctly!\nPlease try again.\nExitting..."
|
||||
sleep 2s
|
||||
exit 1
|
||||
}
|
||||
|
||||
case "$partitionutility" in
|
||||
1 | fdisk | Fdisk | FDISK)
|
||||
partitionutility="fdisk"
|
||||
;;
|
||||
2 | cfdisk | Cfdisk | CFDISK)
|
||||
partitionutility="cfdisk"
|
||||
;;
|
||||
3 | gdisk | Gdisk | GDISK)
|
||||
partitionutility="gdisk"
|
||||
;;
|
||||
4 | parted | Parted | PARTED)
|
||||
partitionutility="parted"
|
||||
;;
|
||||
*)
|
||||
echo "Unknown or unsupported disk utility! Default = cfdisk."
|
||||
partitionutility="cfdisk"
|
||||
;;
|
||||
esac
|
||||
echo "$partitionutility is the selected disk utility tool for partition."
|
||||
sleep 3s
|
||||
clear
|
||||
echo "Getting ready for creating partitions!"
|
||||
echo "boot partition is mandatory for uefi systems. Skip it for legacy systems"
|
||||
echo "root partition is mandatory."
|
||||
echo "home and swap partitions are optional but recommended!"
|
||||
echo "Also, you can create a separate partition for timeshift backup (optional)!"
|
||||
echo "Getting ready in 15 seconds"
|
||||
sleep 15s
|
||||
"$partitionutility" /dev/"$drive"
|
||||
clear
|
||||
lsblk
|
||||
echo " 1. ext4"
|
||||
echo " 2. xfs"
|
||||
echo " 3. btrfs"
|
||||
echo " 4. f2fs"
|
||||
echo " Boot partition will be formatted later in fat32 file system type if you have created one."
|
||||
echo "choose your linux file system type for formatting drives: "
|
||||
read -r filesystemtype
|
||||
configError() {
|
||||
sleep 2s
|
||||
clear
|
||||
echo "Checking configs in new system..."
|
||||
if ! ls /mnt/config &> /dev/null; then
|
||||
echo -e "Reuired config files couldn't be copied to new system. Installation failed!\nAborting..."
|
||||
exit 1
|
||||
else
|
||||
ls /mnt/config
|
||||
echo "All good..."
|
||||
sleep 5s
|
||||
fi
|
||||
}
|
||||
|
||||
case "$filesystemtype" in
|
||||
1 | ext4 | Ext4 | EXT4)
|
||||
filesystemtype="ext4"
|
||||
;;
|
||||
2 | xfs | Xfs | XFS)
|
||||
filesystemtype="xfs"
|
||||
;;
|
||||
3 | btrfs | Btrfs | BTRFS)
|
||||
filesystemtype="btrfs"
|
||||
;;
|
||||
4 | f2fs | F2fs | F2FS)
|
||||
filesystemtype="f2fs"
|
||||
;;
|
||||
*)
|
||||
echo "Unknown or unsupported Filesystem. Default = ext4."
|
||||
filesystemtype="ext4"
|
||||
;;
|
||||
esac
|
||||
echo "$filesystemtype is the selected file system type."
|
||||
sleep 3s
|
||||
clear
|
||||
echo "Getting ready for formatting drives."
|
||||
sleep 3s
|
||||
lsblk
|
||||
echo "Enter the root partition (eg: sda1 or nvme0n1p2 or vda4): "
|
||||
read -r rootpartition
|
||||
mkfs."$filesystemtype" /dev/"$rootpartition"
|
||||
mount /dev/"$rootpartition" /mnt
|
||||
clear
|
||||
lsblk
|
||||
read -p "Did you also create separate home partition? [y/n]: " answerhome
|
||||
case "$answerhome" in
|
||||
y | Y | yes | Yes | YES)
|
||||
echo "Enter home partition (eg: sda2 or nvme0n1p1 or vda2): "
|
||||
read -r homepartition
|
||||
mkfs."$filesystemtype" /dev/"$homepartition"
|
||||
mkdir /mnt/home
|
||||
mount /dev/"$homepartition" /mnt/home
|
||||
;;
|
||||
*)
|
||||
echo "Skipping home partition!"
|
||||
;;
|
||||
esac
|
||||
clear
|
||||
lsblk
|
||||
read -p "Did you also create swap partition? [y/n]: " answerswap
|
||||
case "$answerswap" in
|
||||
y | Y | yes | Yes | YES)
|
||||
echo "Enter swap partition (eg: sda3, nvme0n1p1or vda3): "
|
||||
read -r swappartition
|
||||
mkswap /dev/"$swappartition"
|
||||
swapon /dev/"$swappartition"
|
||||
;;
|
||||
*)
|
||||
echo "Skipping Swap partition!"
|
||||
;;
|
||||
esac
|
||||
ignoreableErrors() {
|
||||
sleep 2s
|
||||
clear
|
||||
echo -e "Something went wrong.\nThe command was not executed correctly!\nThe error can be negleted as it doesn't affect our installation.\nContinuing the installation..."
|
||||
sleep 3s
|
||||
}
|
||||
|
||||
clear
|
||||
lsblk
|
||||
sleep 3s
|
||||
clear
|
||||
echo "Installing Base system"
|
||||
sleep 2s
|
||||
basestrap /mnt base base-devel runit elogind-runit
|
||||
sleep 2s
|
||||
echo "Installing Kernel"
|
||||
basestrap /mnt linux-zen linux-firmware linux-zen-headers
|
||||
clear
|
||||
echo "generating fstab file"
|
||||
fstabgen -U /mnt > /mnt/etc/fstab
|
||||
sleep 1s
|
||||
clear
|
||||
echo "Checking Fstab Contents"
|
||||
cat /mnt/etc/fstab
|
||||
sleep 2s
|
||||
echo "Copying config files to new system"
|
||||
cp /usr/bin/artix-chroot /usr/bin/metis-chroot
|
||||
cp /usr/local/bin/post_install.sh /mnt
|
||||
cp /usr/local/bin/os-release /mnt
|
||||
cp /usr/local/bin/grub /mnt
|
||||
cp /usr/local/bin/xinitrc /mnt
|
||||
cp /usr/local/bin/pacman.conf /mnt
|
||||
cp /usr/local/bin/mirrorlist /mnt
|
||||
cp /usr/local/bin/metis-mirrorlist /mnt
|
||||
cp /usr/local/bin/init.vim /mnt
|
||||
cp /usr/local/bin/zshrc /mnt
|
||||
cp /usr/local/bin/picom.conf /mnt
|
||||
echo "Checking configs in system"
|
||||
ls /mnt
|
||||
sleep 5s
|
||||
clear
|
||||
echo "First Phase Completed!"
|
||||
echo "Entering into Second Phase of Installation..."
|
||||
echo "run the following command to start second phase"
|
||||
echo "1. metis-chroot /mnt"
|
||||
echo "2. ./post_install.sh"
|
||||
updateMirrors() {
|
||||
sleep 2s
|
||||
clear
|
||||
if ! which rankmirrors &> /dev/null; then
|
||||
echo -e "rankmirrors command not found\nCouldn't update the repository mirrorlists\nContinuing without updating mirrors have got chances of installation failure..."
|
||||
else
|
||||
echo -e "\nUpdating latest and fastest mirrorlists to download packages faster.\nBe patient, this may take some time upto few minutes..."
|
||||
rankmirrors -n 20 /etc/pacman.d/mirrorlist > /etc/pacman.d/mirrorlist.new
|
||||
mv /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak || ignoreableErrors
|
||||
mv /etc/pacman.d/mirrorlist.new /etc/pacman.d/mirrorlist || failed
|
||||
echo "Mirrorlists updated..."
|
||||
sleep 2s
|
||||
fi
|
||||
}
|
||||
|
||||
checkingConnection() {
|
||||
sleep 2s
|
||||
clear
|
||||
echo "Checking internet connection..."
|
||||
ping -c 3 metislinux.org || networkError
|
||||
echo "Cool! Internet Connection Available. Getting ready for installation..."
|
||||
sleep 3s
|
||||
}
|
||||
|
||||
settingFont() {
|
||||
sleep 2s
|
||||
clear
|
||||
echo "Setting bigger font for better readability..."
|
||||
sleep 2s
|
||||
setfont ter-v22b || ignoreableErrors
|
||||
}
|
||||
|
||||
displayArt(){
|
||||
sleep 2s
|
||||
clear
|
||||
echo -ne "
|
||||
__________________________________________________________________________________________________________
|
||||
| |
|
||||
| +-+-+-+-+-+ +-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+ |
|
||||
| |M|a|g|i|c| |M|e|t|i|s| |I|n|s|t|a|l|l|e|r| |
|
||||
| +-+-+-+-+-+ +-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+ |
|
||||
| |
|
||||
|---------------------------------------------------------------------------------------------------------|
|
||||
| Official Cli installer for metis linux. |
|
||||
|---------------------------------------------------------------------------------------------------------|
|
||||
| Install Metis Linus in few clicks |
|
||||
| Check: https://github.com/metis-os for details or visit https://metislinux.org |
|
||||
|---------------------------------------------------------------------------------------------------------|
|
||||
|_________________________________________________________________________________________________________|
|
||||
"
|
||||
}
|
||||
|
||||
checkDrive(){
|
||||
if ! lsblk | grep "$drive" &> /dev/null ; then
|
||||
clear
|
||||
echo -e "$drive is not found. Check your available disks and try again.\nAborting installation\nInstallation failed..."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
diskPartition(){
|
||||
sleep 2s
|
||||
clear
|
||||
echo -ne "
|
||||
------------------------------------------------------------------------
|
||||
THIS WILL FORMAT AND DELETE ALL DATA ON THE DISK
|
||||
Please make sure you know what you are doing because
|
||||
after formating your disk there is no way to get data back
|
||||
------------------------------------------------------------------------
|
||||
"
|
||||
lsblk
|
||||
echo "Enter the drive to install metis linux on it."
|
||||
echo "Enter Drive (eg. sda or vda or nvme0n1): "
|
||||
read -r drive
|
||||
checkDrive
|
||||
sleep 2s
|
||||
clear
|
||||
lsblk
|
||||
echo "Choose a familier disk utility tool to partition your drive! [Default=cfdisk]: "
|
||||
echo " 1. fdisk"
|
||||
echo " 2. cfdisk"
|
||||
echo " 3. gdisk"
|
||||
echo " 4. parted"
|
||||
read -r partitionutility
|
||||
|
||||
case "$partitionutility" in
|
||||
1 | fdisk | Fdisk | FDISK)
|
||||
partitionutility="fdisk"
|
||||
;;
|
||||
2 | cfdisk | Cfdisk | CFDISK)
|
||||
partitionutility="cfdisk"
|
||||
;;
|
||||
3 | gdisk | Gdisk | GDISK)
|
||||
partitionutility="gdisk"
|
||||
;;
|
||||
4 | parted | Parted | PARTED)
|
||||
partitionutility="parted"
|
||||
;;
|
||||
*)
|
||||
echo "Unknown or unsupported disk utility! Default = cfdisk."
|
||||
partitionutility="cfdisk"
|
||||
;;
|
||||
esac
|
||||
echo "$partitionutility is the selected disk utility tool for partition."
|
||||
echo "Getting ready for creating partitions!"
|
||||
sleep 2s
|
||||
clear
|
||||
echo "boot partition is mandatory for uefi systems. Skip it for legacy systems"
|
||||
echo "root partition is mandatory."
|
||||
echo "home and swap partitions are optional but recommended!"
|
||||
echo "Also, you can create a separate partition for timeshift backup (optional)!"
|
||||
echo "Getting ready in 15 seconds"
|
||||
sleep 15s
|
||||
"$partitionutility" /dev/"$drive"
|
||||
clear
|
||||
lsblk
|
||||
echo " 1. ext4"
|
||||
echo " 2. xfs"
|
||||
echo " 3. btrfs"
|
||||
echo " 4. f2fs"
|
||||
echo " Boot partition will be formatted later in fat32 file system (for uefi systems only)."
|
||||
echo "Choose your linux file system type for formatting drives [default=ext4]: "
|
||||
read -r filesystemtype
|
||||
|
||||
case "$filesystemtype" in
|
||||
1 | ext4 | Ext4 | EXT4)
|
||||
filesystemtype="ext4"
|
||||
;;
|
||||
2 | xfs | Xfs | XFS)
|
||||
filesystemtype="xfs"
|
||||
;;
|
||||
3 | btrfs | Btrfs | BTRFS)
|
||||
filesystemtype="btrfs"
|
||||
;;
|
||||
4 | f2fs | F2fs | F2FS)
|
||||
filesystemtype="f2fs"
|
||||
;;
|
||||
*)
|
||||
echo "Unknown or unsupported Filesystem. Default = ext4."
|
||||
filesystemtype="ext4"
|
||||
;;
|
||||
esac
|
||||
echo "$filesystemtype is the selected file system type."
|
||||
echo "Getting ready for formatting drives."
|
||||
sleep 3s
|
||||
clear
|
||||
lsblk
|
||||
echo "Enter the root partition (eg: sda1 or nvme0n1p2 or vda4): "
|
||||
read -r rootpartition
|
||||
mkfs."$filesystemtype" /dev/"$rootpartition"
|
||||
mount /dev/"$rootpartition" /mnt
|
||||
if mountpoint /mnt = "/mnt is not a mountpoint"; then
|
||||
clear
|
||||
echo -e "$rootpartition is not mounted successfully. Aborting installation!\nInstallation failed..."
|
||||
exit 1
|
||||
else
|
||||
echo "Cool $rootpartition mounted at /mnt"
|
||||
sleep 2s
|
||||
fi
|
||||
|
||||
clear
|
||||
lsblk
|
||||
echo "Did you also create separate home partition? [y/n]: "
|
||||
read -r answerhome
|
||||
case "$answerhome" in
|
||||
y | Y | yes | Yes | YES)
|
||||
echo "Enter home partition (eg: sda2 or nvme0n1p1 or vda2): "
|
||||
read -r homepartition
|
||||
mkfs."$filesystemtype" /dev/"$homepartition"
|
||||
mkdir /mnt/home
|
||||
mount /dev/"$homepartition" /mnt/home
|
||||
if mountpoint /mnt/home = "/mnt/home is not a mountpoint"; then
|
||||
clear
|
||||
echo -e "$homepartition is not mounted successfully. Aborting installation!\nInstallation failed..."
|
||||
exit 1
|
||||
else
|
||||
echo "Cool $homepartition mounted at /mnt/home"
|
||||
sleep 2s
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "Skipping home partition!"
|
||||
;;
|
||||
esac
|
||||
clear
|
||||
lsblk
|
||||
echo "Did you also create swap partition? [y/n]: "
|
||||
read -r answerswap
|
||||
case "$answerswap" in
|
||||
y | Y | yes | Yes | YES)
|
||||
echo "Enter swap partition (eg: sda3, nvme0n1p1or vda3): "
|
||||
read -r swappartition
|
||||
mkswap /dev/"$swappartition"
|
||||
swapon /dev/"$swappartition"
|
||||
;;
|
||||
*)
|
||||
echo "Skipping Swap partition!"
|
||||
;;
|
||||
esac
|
||||
lsblk
|
||||
sleep 2s
|
||||
}
|
||||
|
||||
installingBase() {
|
||||
sleep 2s
|
||||
clear
|
||||
echo "Installing Base system..."
|
||||
basestrap /mnt base base-devel runit elogind-runit || installationError
|
||||
sleep 2s
|
||||
}
|
||||
|
||||
installingKernel() {
|
||||
sleep 2s
|
||||
clear
|
||||
echo "Installing Zen Kernel with its headers and firmware..."
|
||||
basestrap /mnt linux-zen linux-firmware linux-zen-headers || installationError
|
||||
sleep 2s
|
||||
}
|
||||
|
||||
generatingFstab() {
|
||||
sleep 2s
|
||||
clear
|
||||
echo "generating fstab file"
|
||||
fstabgen -U /mnt > /mnt/etc/fstab || failed
|
||||
echo "Checking Fstab Contents..."
|
||||
cat /mnt/etc/fstab
|
||||
sleep 3s
|
||||
}
|
||||
|
||||
copyingConfig() {
|
||||
sleep 2s
|
||||
clear
|
||||
echo "Copying config files to new system..."
|
||||
cp /etc/pacman.d/mirrorlist /mnt/etc/pacman.d/mirrorlist || ignoreableErrors
|
||||
cp /etc/pacman.d/metis-mirrorlist /mnt/etc/pacman.d/metis-mirrorlist || failed
|
||||
cp /etc/pacman.conf /mnt/etc/pacman.conf || failed
|
||||
mv /usr/local/config/post_install.sh /mnt/ || failed
|
||||
cp -r /usr/local/config /mnt
|
||||
configError
|
||||
}
|
||||
|
||||
firstphaseCompleted(){
|
||||
sleep 2s
|
||||
clear
|
||||
echo "First Phase Completed!"
|
||||
echo "Entering into Second Phase of Installation..."
|
||||
echo "Run the following commands to start second phase..."
|
||||
echo "1. metis-chroot /mnt"
|
||||
echo "2. ./post_install.sh"
|
||||
}
|
||||
|
||||
displayArt
|
||||
settingFont
|
||||
checkingConnection
|
||||
updateMirrors
|
||||
diskPartition
|
||||
installingBase
|
||||
installingKernel
|
||||
generatingFstab
|
||||
copyingConfig
|
||||
firstphaseCompleted
|
||||
|
|
|
@ -1,21 +0,0 @@
|
|||
# Server list generated by rankmirrors on 2022-06-09
|
||||
Server = https://ftp.halifax.rwth-aachen.de/artixlinux/$repo/os/$arch
|
||||
Server = https://mirror1.artixlinux.org/repos/$repo/os/$arch
|
||||
Server = http://artist.artixlinux.org/repos/$repo/os/$arch
|
||||
Server = https://mirror.netcologne.de/artix-linux/$repo/os/$arch
|
||||
Server = https://mirrors.dotsrc.org/artix-linux/repos/$repo/os/$arch
|
||||
Server = https://ftp.crifo.org/artix/repos/$repo/os/$arch
|
||||
Server = https://mirrors.tuna.tsinghua.edu.cn/artixlinux/$repo/os/$arch
|
||||
Server = https://mirror.pascalpuffke.de/artix-linux/$repo/os/$arch
|
||||
Server = https://us-mirror.artixlinux.org/$repo/os/$arch
|
||||
Server = https://eu-mirror.artixlinux.org/repos/$repo/os/$arch
|
||||
Server = https://artix.unixpeople.org/repos/$repo/os/$arch
|
||||
Server = http://mirrors.redcorelinux.org/artixlinux/$repo/os/$arch
|
||||
Server = https://mirror.one.com/artix/$repo/os/$arch
|
||||
Server = https://artixlinux.qontinuum.space/artixlinux/$repo/os/$arch
|
||||
Server = https://mirror.funami.tech/artix/$repo/os/$arch
|
||||
Server = https://mirror.freedif.org/Artix/$repo/os/$arch
|
||||
Server = http://ftp.ntua.gr/pub/linux/artix-linux/$repo/os/$arch
|
||||
Server = https://mirror.csclub.uwaterloo.ca/artixlinux/$repo/os/$arch
|
||||
Server = https://mirror.linux.pizza/artix-linux/$repo/os/$arch
|
||||
Server = https://mirror.clarkson.edu/artix-linux/repos/$repo/os/$arch
|
|
@ -1,119 +0,0 @@
|
|||
#
|
||||
# /etc/pacman.conf
|
||||
#
|
||||
# See the pacman.conf(5) manpage for option and repository directives
|
||||
|
||||
#
|
||||
# GENERAL OPTIONS
|
||||
#
|
||||
[options]
|
||||
# The following paths are commented out with their default values listed.
|
||||
# If you wish to use different paths, uncomment and update the paths.
|
||||
#RootDir = /
|
||||
#DBPath = /var/lib/pacman/
|
||||
#CacheDir = /var/cache/pacman/pkg/
|
||||
#LogFile = /var/log/pacman.log
|
||||
#GPGDir = /etc/pacman.d/gnupg/
|
||||
#HookDir = /etc/pacman.d/hooks/
|
||||
HoldPkg = pacman glibc
|
||||
#XferCommand = /usr/bin/curl -L -C - -f -o %o %u
|
||||
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
|
||||
#CleanMethod = KeepInstalled
|
||||
Architecture = auto
|
||||
|
||||
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
|
||||
IgnorePkg = audacity
|
||||
#IgnoreGroup =
|
||||
|
||||
#NoUpgrade =
|
||||
#NoExtract =
|
||||
|
||||
# Misc options
|
||||
#UseSyslog
|
||||
#NoProgressBar
|
||||
Color
|
||||
CheckSpace
|
||||
ILoveCandy
|
||||
VerbosePkgLists
|
||||
ParallelDownloads = 15
|
||||
|
||||
# By default, pacman accepts packages signed by keys that its local keyring
|
||||
# trusts (see pacman-key and its man page), as well as unsigned packages.
|
||||
SigLevel = Required DatabaseOptional
|
||||
LocalFileSigLevel = Optional
|
||||
#RemoteFileSigLevel = Required
|
||||
|
||||
# NOTE: You must run `pacman-key --init` before first using pacman; the local
|
||||
# keyring can then be populated with the keys of all official Artix Linux
|
||||
# packagers with `pacman-key --populate artix`.
|
||||
|
||||
#
|
||||
# REPOSITORIES
|
||||
# - can be defined here or included from another file
|
||||
# - pacman will search repositories in the order defined here
|
||||
# - local/custom mirrors can be added here or in separate files
|
||||
# - repositories listed first will take precedence when packages
|
||||
# have identical names, regardless of version number
|
||||
# - URLs will have $repo replaced by the name of the current repo
|
||||
# - URLs will have $arch replaced by the name of the architecture
|
||||
#
|
||||
# Repository entries are of the format:
|
||||
# [repo-name]
|
||||
# Server = ServerName
|
||||
# Include = IncludePath
|
||||
#
|
||||
# The header [repo-name] is crucial - it must be present and
|
||||
# uncommented to enable the repo.
|
||||
#
|
||||
|
||||
# The gremlins repositories are disabled by default. To enable, uncomment the
|
||||
# repo name header and Include lines. You can add preferred servers immediately
|
||||
# after the header, and they will be used before the default mirrors.
|
||||
|
||||
|
||||
### Metis Linux Repos
|
||||
[metis]
|
||||
SigLevel = Optional TrustAll
|
||||
Include = /etc/pacman.d/metis-mirrorlist
|
||||
|
||||
#[gremlins]
|
||||
#Include = /etc/pacman.d/mirrorlist
|
||||
|
||||
[system]
|
||||
Include = /etc/pacman.d/mirrorlist
|
||||
|
||||
[world]
|
||||
Include = /etc/pacman.d/mirrorlist
|
||||
|
||||
#[galaxy-gremlins]
|
||||
#Include = /etc/pacman.d/mirrorlist
|
||||
|
||||
[galaxy]
|
||||
Include = /etc/pacman.d/mirrorlist
|
||||
|
||||
# If you want to run 32 bit applications on your x86_64 system,
|
||||
# enable the lib32 repositories as required here.
|
||||
|
||||
#[lib32-gremlins]
|
||||
#Include = /etc/pacman.d/mirrorlist
|
||||
|
||||
#[lib32]
|
||||
#Include = /etc/pacman.d/mirrorlist
|
||||
|
||||
# An example of a custom package repository. See the pacman manpage for
|
||||
# tips on creating your own repositories.
|
||||
#[custom]
|
||||
#SigLevel = Optional TrustAll
|
||||
#Server = file:///home/custompkgs
|
||||
|
||||
### ARCH LINUX REPOS
|
||||
## Install archlinux-keyrings and enable arch repos to ues them
|
||||
## Be careful enabling arch liux core repos as it contains many systemd dependent packages which we don't use.
|
||||
# [core]
|
||||
# Include = /etc/pacman.d/arch-mirrorlist
|
||||
|
||||
#[extra]
|
||||
#Include = /etc/pacman.d/arch-mirrorlist
|
||||
|
||||
#[community]
|
||||
#Include = /etc/pacman.d/arch-mirrorlist
|
|
@ -1,175 +0,0 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
clear
|
||||
echo "generating locale"
|
||||
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
|
||||
locale-gen
|
||||
sleep 2s
|
||||
|
||||
clear
|
||||
echo "Getting Timezone..."
|
||||
timezone() {
|
||||
time_zone="$(curl --fail https://ipapi.co/timezone)"
|
||||
clear
|
||||
echo "System detected your timezone to be $time_zone"
|
||||
echo "Is this correct?"
|
||||
|
||||
PS3="Select one.[1/2]: "
|
||||
options=("Yes" "No")
|
||||
select one in "${options[@]}"; do
|
||||
case $one in
|
||||
Yes)
|
||||
echo "${time_zone} set as timezone"
|
||||
ln -sf /usr/share/zoneinfo/"$time_zone" /etc/localtime && break
|
||||
;;
|
||||
No)
|
||||
echo "Please enter your desired timezone e.g. Europe/London :"
|
||||
read -r new_timezone
|
||||
echo "${new_timezone} set as timezone"
|
||||
ln -sf /usr/share/zoneinfo/"$time_zone" /etc/localtime && break
|
||||
;;
|
||||
*) echo "Wrong option. Try again";timezone;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
timezone
|
||||
hwclock --systohc
|
||||
echo "checking date"
|
||||
date
|
||||
sleep 2s
|
||||
clear
|
||||
|
||||
echo "setting LANG variable"
|
||||
echo "LANG=en_US.UTF-8" >> /etc/locale.conf
|
||||
echo "LC_COLLATE=C" >> /etc/locale.conf
|
||||
sleep 2s
|
||||
clear
|
||||
echo "setting console keyboard layout"
|
||||
echo "KEYMAP=us" > /etc/vconsole.conf
|
||||
sleep 2s
|
||||
clear
|
||||
echo "Set up your hostname!"
|
||||
echo "Enter your computer name: "
|
||||
read -r hostname
|
||||
echo "$hostname" > /etc/hostname
|
||||
echo "Checking hostname (/etc/hostname)"
|
||||
cat /etc/hostname
|
||||
sleep 1s
|
||||
clear
|
||||
echo "setting up hosts file"
|
||||
echo "127.0.0.1 localhost" >> /etc/hosts
|
||||
echo "::1 localhost" >> /etc/hosts
|
||||
echo "127.0.1.1 $hostname.localdomain $hostname" >> /etc/hosts
|
||||
clear
|
||||
echo "checking /etc/hosts file"
|
||||
cat /etc/hosts
|
||||
sleep 2s
|
||||
#if you are dualbooting, add os-prober with grub and efibootmgr
|
||||
echo "Installing grub networkmanager and xwallpaper"
|
||||
pacman -Sy --needed --noconfirm grub networkmanager-runit xwallpaper zsh
|
||||
clear
|
||||
sleep 1s
|
||||
clear
|
||||
echo "Enabling NetworkManager"
|
||||
ln -s /etc/runit/sv/NetworkManager /etc/runit/runsvdir/default
|
||||
sleep 2s
|
||||
clear
|
||||
echo "Enter password for root user:"
|
||||
passwd
|
||||
clear
|
||||
echo "Adding regular user!"
|
||||
echo "Enter username to add a regular user: "
|
||||
read -r username
|
||||
useradd -m -g users -G wheel,audio,video,network,storage -s /bin/zsh "$username"
|
||||
echo "To set password for $username, use different password than for root."
|
||||
echo "Enter password for "$username": "
|
||||
passwd "$username"
|
||||
echo "NOTE: ALWAYS REMEMBER THIS USERNAME AND PASSWORD YOU PUT JUST NOW."
|
||||
sleep 2s
|
||||
mv /os-release /usr/lib/
|
||||
mv /pacman.conf /etc/
|
||||
mv /mirrorlist /etc/pacman.d/
|
||||
# mv /arch-mirrorlist /etc/pacman.d/
|
||||
mv /metis-mirrorlist /etc/pacman.d/
|
||||
mv /xinitrc /home/"$username"/.xinitrc
|
||||
chown "$username":users /home/"$username"/.xinitrc
|
||||
sleep 2s
|
||||
mkdir -p /home/"$username"/.config/nvim/
|
||||
mkdir -p /home/"$username"/.config/picom/
|
||||
mv /init.vim /home/"$username"/.config/nvim/
|
||||
chown -R "$username":users /home/"$username"/.config
|
||||
mv /zshrc /home/"$username"/.zshrc
|
||||
chown "$username":users /home/"$username"/.zshrc
|
||||
mv /picom.conf /home/"$username"/.config/picom/
|
||||
chown -R "$username":users /home/"$username"/.config/picom
|
||||
chown -R "$username":users /home/"$username"/.config/
|
||||
sleep 2s
|
||||
clear
|
||||
mv /grub /etc/default/
|
||||
pacman -Sy --needed --noconfirm metis-dwm metis-st metis-dmenu metis-wallpapers xorg-server xorg-xinit xorg-xsetroot nerd-fonts-jetbrains-mono ttf-font-awesome pavucontrol pulseaudio pulseaudio-alsa firefox brillo linux-zen-headers linux-firmware curl git neovim zsh metis-slstatus picom-jonaburg-git acpi
|
||||
sleep 3s
|
||||
clear
|
||||
proc_type=$(lscpu)
|
||||
if grep -E "GenuineIntel" <<< ${proc_type}; then
|
||||
echo "Installing Intel microcode"
|
||||
pacman -S --noconfirm --needed intel-ucode
|
||||
elif grep -E "AuthenticAMD" <<< ${proc_type}; then
|
||||
echo "Installing AMD microcode"
|
||||
pacman -S --noconfirm --needed amd-ucode
|
||||
fi
|
||||
|
||||
sleep 2s
|
||||
|
||||
#Adding sudo previliages to the user you created
|
||||
echo "Giving sudo access to "$username"!"
|
||||
echo "$username ALL=(ALL) ALL" >> /etc/sudoers.d/$username
|
||||
sleep 2s
|
||||
clear
|
||||
lsblk
|
||||
if [[ ! -d "/sys/firmware/efi" ]]; then
|
||||
clear
|
||||
echo "Installing grub for legacy system"
|
||||
sleep 2s
|
||||
clear
|
||||
echo "Enter the drive name to install bootloader in it. (eg: sda or nvme01 or vda or something similar)! "
|
||||
echo "NOTE: JUST GIVE DRIVE NAME (sda, nvme0n1, vda or something similar); NOT THE PARTITION NAME (sda1)"
|
||||
echo "Enter the drive name: "
|
||||
read -r grubdrive
|
||||
grub-install --target=i386-pc /dev/"$grubdrive"
|
||||
grub-mkconfig -o /boot/grub/grub.cfg
|
||||
else
|
||||
echo "Installing efibootmgr"
|
||||
pacman -Sy --needed --noconfirm efibootmgr dosfstools
|
||||
sleep 1s
|
||||
clear
|
||||
lsblk
|
||||
echo "Enter partition to install grub! (eg: sda2 or nvme0n1p3, vda4 or something similar): "
|
||||
read -r grubpartition
|
||||
mkfs.fat -F 32 /dev/"$grubpartition"
|
||||
mkdir -p /boot/efi
|
||||
mount /dev/"$grubpartition" /boot/efi
|
||||
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB --removable
|
||||
grub-mkconfig -o /boot/grub/grub.cfg
|
||||
fi
|
||||
sleep 2s
|
||||
clear
|
||||
|
||||
echo "Searching and Installing graphics driver if available"
|
||||
gpu_type=$(lspci)
|
||||
if grep -E "NVIDIA|GeForce" <<< ${gpu_type}; then
|
||||
pacman -S --noconfirm --needed nvidia nvidia-utils
|
||||
elif lspci | grep 'VGA' | grep -E "Radeon|AMD"; then
|
||||
pacman -S --noconfirm --needed xf86-video-amdgpu
|
||||
elif grep -E "Integrated Graphics Controller" <<< ${gpu_type}; then
|
||||
pacman -S --noconfirm --needed libva-intel-driver libvdpau-va-gl vulkan-intel libva-utils
|
||||
elif grep -E "Intel Corporation UHD" <<< ${gpu_type}; then
|
||||
pacman -S --needed --noconfirm libva-intel-driver libvdpau-va-gl vulkan-intel libva-intel-driver libva-utils
|
||||
fi
|
||||
sleep 2s
|
||||
clear
|
||||
echo "Second Phase Completed!"
|
||||
echo "Entering into Final Phase of Installation..."
|
||||
echo "run the following commands to start final phase "
|
||||
echo "1. exit"
|
||||
echo "2. final.sh"
|
||||
sleep 5s
|
242
base/root-overlay/usr/local/bin/rankmirrors
Executable file
242
base/root-overlay/usr/local/bin/rankmirrors
Executable file
|
@ -0,0 +1,242 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# rankmirrors - read a list of mirrors from a file and rank them by speed
|
||||
# Generated from rankmirrors.sh.in; do not edit by hand.
|
||||
#
|
||||
# Copyright (c) 2009 Matthew Bruenig <matthewbruenig@gmail.com>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# traps interrupt key to spit out pre-interrupt info
|
||||
trap finaloutput INT
|
||||
|
||||
declare -r myname='rankmirrors'
|
||||
declare -r myver='1.5.3'
|
||||
|
||||
usage() {
|
||||
echo "${myname} v${myver}"
|
||||
echo
|
||||
echo "Ranks pacman mirrors by their connection and opening speed. Pacman mirror"
|
||||
echo "files are located in /etc/pacman.d/. It can also rank one mirror if the URL is"
|
||||
echo "provided."
|
||||
echo
|
||||
echo "Usage: ${myname} [options] MIRRORFILE | URL"
|
||||
echo
|
||||
echo "Options:"
|
||||
echo " --version show program's version number and exit"
|
||||
echo " -h, --help show this help message and exit"
|
||||
echo " -n NUM number of servers to output, 0 for all"
|
||||
echo " -m, --max-time NUM specify a ranking operation timeout, can be decimal number"
|
||||
echo " -t, --times only output mirrors and their response times"
|
||||
echo " -u, --url test a specific URL"
|
||||
echo " -v, --verbose be verbose in output"
|
||||
echo " -r, --repo specify a repository name instead of guessing"
|
||||
exit 0
|
||||
}
|
||||
|
||||
version() {
|
||||
echo "${myname} (pacman) ${myver}"
|
||||
echo "Copyright (c) 2009 Matthew Bruenig <matthewbruenig@gmail.com>."
|
||||
echo
|
||||
echo "This is free software; see the source for copying conditions."
|
||||
echo "There is NO WARRANTY, to the extent permitted by law."
|
||||
exit 0
|
||||
}
|
||||
|
||||
err() {
|
||||
echo "$1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
# gettime fetchurl (e.g gettime http://foo.com/system/os/i686/system.db.tar.gz)
|
||||
# returns the fetching time, or timeout, or unreachable
|
||||
gettime() {
|
||||
IFS=' ' output=( $(curl -s -m $MAX_TIME -w "%{time_total} %{http_code}" "$1" -o/dev/null) )
|
||||
(( $? == 28 )) && echo timeout && return
|
||||
(( ${output[1]} >= 400 || ! ${output[1]} )) && echo unreachable && return
|
||||
echo "${output[0]}"
|
||||
}
|
||||
|
||||
# getfetchurl serverurl (e.g. getturl http://foo.com/system/os/i686)
|
||||
# if $repo is in the line, then assumes system
|
||||
# if $arch is in the line, then assumes $(uname -m)
|
||||
# returns a fetchurl (e.g. http://foo.com/system/os/i686/system.db.tar.gz)
|
||||
ARCH="$(uname -m)"
|
||||
getfetchurl() {
|
||||
local strippedurl="${1%/}"
|
||||
|
||||
local replacedurl="${strippedurl//'$arch'/$ARCH}"
|
||||
if [[ ! $TARGETREPO ]]; then
|
||||
replacedurl="${replacedurl//'$repo'/system}"
|
||||
local tmp="${replacedurl%/*}"
|
||||
tmp="${tmp%/*}"
|
||||
|
||||
local reponame="${tmp##*/}"
|
||||
else
|
||||
replacedurl="${replacedurl//'$repo'/$TARGETREPO}"
|
||||
local reponame="$TARGETREPO"
|
||||
fi
|
||||
|
||||
if [[ -z $reponame || $reponame = $replacedurl ]]; then
|
||||
echo "fail"
|
||||
else
|
||||
local fetchurl="${replacedurl}/$reponame.db"
|
||||
echo "$fetchurl"
|
||||
fi
|
||||
}
|
||||
|
||||
# This exists to remove the need for a separate interrupt function
|
||||
finaloutput() {
|
||||
IFS=$'\n' read -r -d '' -a sortedarray < \
|
||||
<(printf '%s\n' "${timesarray[@]}" | LC_COLLATE=C sort)
|
||||
|
||||
# Final output for mirrorfile
|
||||
numiterator="0"
|
||||
if [[ $TIMESONLY ]]; then
|
||||
echo
|
||||
echo " Servers sorted by time (seconds):"
|
||||
for line in "${sortedarray[@]}"; do
|
||||
echo "${line#* } : ${line% *}"
|
||||
((numiterator++))
|
||||
(( NUM && numiterator >= NUM )) && break
|
||||
done
|
||||
else
|
||||
for line in "${sortedarray[@]}"; do
|
||||
echo "Server = ${line#* }"
|
||||
((numiterator++))
|
||||
(( NUM && numiterator >= NUM )) && break
|
||||
done
|
||||
fi
|
||||
exit 0
|
||||
}
|
||||
|
||||
|
||||
# Argument parsing
|
||||
[[ $1 ]] || usage
|
||||
while [[ $1 ]]; do
|
||||
if [[ ${1:0:2} = -- ]]; then
|
||||
case "${1:2}" in
|
||||
help) usage ;;
|
||||
version) version ;;
|
||||
max-time)
|
||||
[[ $2 ]] || err "Must specify number.";
|
||||
MAX_TIME="$2"
|
||||
shift 2;;
|
||||
times) TIMESONLY=1 ; shift ;;
|
||||
verbose) VERBOSE=1 ; shift ;;
|
||||
url)
|
||||
CHECKURL=1;
|
||||
[[ $2 ]] || err "Must specify URL.";
|
||||
URL="$2";
|
||||
shift 2;;
|
||||
repo)
|
||||
[[ $2 ]] || err "Must specify repository name.";
|
||||
TARGETREPO="$2";
|
||||
shift 2;;
|
||||
*) err "'$1' is an invalid argument."
|
||||
esac
|
||||
elif [[ ${1:0:1} = - ]]; then
|
||||
|
||||
if [[ ! ${1:1:1} ]]; then
|
||||
[[ -t 0 ]] && err "Stdin is empty."
|
||||
IFS=$'\n' linearray=( $(</dev/stdin) )
|
||||
STDIN=1
|
||||
shift
|
||||
else
|
||||
snum=1
|
||||
for ((i=1 ; i<${#1}; i++)); do
|
||||
case ${1:$i:1} in
|
||||
h) usage ;;
|
||||
m)
|
||||
[[ $2 ]] || err "Must specify number.";
|
||||
MAX_TIME="$2"
|
||||
snum=2;;
|
||||
t) TIMESONLY=1 ;;
|
||||
v) VERBOSE=1 ;;
|
||||
u)
|
||||
CHECKURL=1;
|
||||
[[ $2 ]] || err "Must specify URL.";
|
||||
URL="$2";
|
||||
snum=2;;
|
||||
r)
|
||||
[[ $2 ]] || err "Must specify repository name.";
|
||||
TARGETREPO="$2";
|
||||
snum=2;;
|
||||
n)
|
||||
[[ $2 ]] || err "Must specify number.";
|
||||
NUM="$2";
|
||||
snum=2;;
|
||||
*) err "'$1' is an invalid argument." ;;
|
||||
esac
|
||||
done
|
||||
shift $snum
|
||||
fi
|
||||
elif [[ -f $1 ]]; then
|
||||
FILE="1"
|
||||
IFS=$'\n' linearray=( $(<$1) )
|
||||
[[ $linearray ]] || err "File is empty."
|
||||
shift
|
||||
else
|
||||
err "'$1' does not exist."
|
||||
fi
|
||||
done
|
||||
|
||||
# Some sanity checks
|
||||
[[ $NUM ]] || NUM=0
|
||||
[[ $MAX_TIME ]] || MAX_TIME=10
|
||||
[[ $FILE && $CHECKURL ]] && err "Cannot specify a URL and mirrorfile."
|
||||
[[ $FILE || $CHECKURL || $STDIN ]] || err "Must specify URL, mirrorfile, or stdin."
|
||||
|
||||
# Single URL handling
|
||||
if [[ $CHECKURL ]]; then
|
||||
url="$(getfetchurl "$URL")"
|
||||
[[ $url = fail ]] && err "URL '$URL' is malformed."
|
||||
[[ $VERBOSE ]] && echo "Testing $url..."
|
||||
time=$(gettime "$url")
|
||||
echo "$URL : $time"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Get URL results from mirrorfile, fill up the array, and so on
|
||||
if [[ $TIMESONLY ]]; then
|
||||
echo "Querying servers. This may take some time..."
|
||||
elif [[ $FILE ]]; then
|
||||
echo "# Server list generated by rankmirrors on $(date +%Y-%m-%d)"
|
||||
fi
|
||||
|
||||
timesarray=()
|
||||
for line in "${linearray[@]}"; do
|
||||
if [[ $line =~ ^[[:space:]]*# ]]; then
|
||||
[[ $TIMESONLY ]] || echo $line
|
||||
elif [[ $line =~ ^[[:space:]]*Server ]]; then
|
||||
|
||||
# Getting values and times and such
|
||||
server="${line#*= }"
|
||||
server="${server%%#*}"
|
||||
url="$(getfetchurl "$server")"
|
||||
[[ $url = fail ]] && err "URL '$URL' is malformed."
|
||||
time=$(gettime "$url")
|
||||
timesarray+=("$time $server")
|
||||
|
||||
# Output
|
||||
if [[ $VERBOSE && $TIMESONLY ]]; then
|
||||
echo "$server ... $time"
|
||||
elif [[ $VERBOSE ]]; then
|
||||
echo "# $server ... $time"
|
||||
elif [[ $TIMESONLY ]]; then
|
||||
echo -n " *"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
finaloutput
|
|
@ -1,7 +1,7 @@
|
|||
# GRUB boot loader configuration
|
||||
|
||||
GRUB_DEFAULT=0
|
||||
GRUB_TIMEOUT=0
|
||||
GRUB_TIMEOUT=5
|
||||
GRUB_DISTRIBUTOR="Metis"
|
||||
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet console=tty2"
|
||||
GRUB_CMDLINE_LINUX=""
|
|
@ -134,7 +134,7 @@ if (has("termguicolors"))
|
|||
set termguicolors
|
||||
endif
|
||||
|
||||
" Include the separate file for plugins (if exists)
|
||||
" Include the separate file for plugins and plugin related keybindings (if exists)
|
||||
if filereadable(expand("~/.config/nvim/plugins.vim"))
|
||||
source ~/.config/nvim/plugins.vim
|
||||
endif
|
285
base/root-overlay/usr/local/config/post_install.sh
Executable file
285
base/root-overlay/usr/local/config/post_install.sh
Executable file
|
@ -0,0 +1,285 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
failed() {
|
||||
sleep 2s
|
||||
clear
|
||||
echo -e "Something went wrong.\nThe command could not be executed correctly!\nPlease try again.\nExitting..."
|
||||
sleep 2s
|
||||
exit 1
|
||||
}
|
||||
|
||||
installationError() {
|
||||
sleep 2s
|
||||
clear
|
||||
echo -e "Something went wrong.\nAll the packages couldn't be installed correctly!\nPlease try again.\nExitting..."
|
||||
sleep 2s
|
||||
exit 1
|
||||
}
|
||||
|
||||
ignoreableErrors() {
|
||||
sleep 2s
|
||||
clear
|
||||
echo -e "Something went wrong.\nOS is installing and could be useable but the error should be manually fixed later..."
|
||||
sleep 3s
|
||||
}
|
||||
|
||||
displayArt(){
|
||||
sleep 1s
|
||||
clear
|
||||
echo -ne "
|
||||
Installing Metis Linux in a VM is not recommended as it may perform slow and buggy.
|
||||
__________________________________________________________________________________________________________
|
||||
| |
|
||||
| +-+-+-+-+-+ +-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+ |
|
||||
| |M|a|g|i|c| |M|e|t|i|s| |I|n|s|t|a|l|l|e|r| |
|
||||
| +-+-+-+-+-+ +-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+ |
|
||||
| |
|
||||
|---------------------------------------------------------------------------------------------------------|
|
||||
| PHASE 2 |
|
||||
|---------------------------------------------------------------------------------------------------------|
|
||||
| Install Metis Linus in few clicks |
|
||||
| Check: https://github.com/metis-os for details or visit https://metislinux.org |
|
||||
|---------------------------------------------------------------------------------------------------------|
|
||||
|_________________________________________________________________________________________________________|
|
||||
"
|
||||
sleep 4s
|
||||
}
|
||||
|
||||
generatingLocale() {
|
||||
sleep 2s
|
||||
clear
|
||||
echo "Generating locale at /etc/locale.gen"
|
||||
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen || ignoreableErrors
|
||||
locale-gen
|
||||
}
|
||||
|
||||
timezone() {
|
||||
echo "Getting Timezone..."
|
||||
time_zone="$(curl --fail https://ipapi.co/timezone)"
|
||||
clear
|
||||
echo "System detected your timezone to be $time_zone"
|
||||
echo "Is this correct?"
|
||||
|
||||
PS3="Select one.[1/2]: "
|
||||
options=("Yes" "No")
|
||||
select one in "${options[@]}"; do
|
||||
case $one in
|
||||
Yes)
|
||||
echo "${time_zone} set as timezone"
|
||||
ln -sf /usr/share/zoneinfo/"$time_zone" /etc/localtime && break
|
||||
;;
|
||||
No)
|
||||
echo "Please enter your desired timezone e.g. Europe/London :"
|
||||
read -r new_timezone
|
||||
echo "${new_timezone} set as timezone"
|
||||
ln -sf /usr/share/zoneinfo/"$time_zone" /etc/localtime && break
|
||||
;;
|
||||
*) echo "Wrong option. Try again";timezone;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
settingTimezone() {
|
||||
sleep 2s
|
||||
clear
|
||||
timezone
|
||||
hwclock --systohc
|
||||
echo "Checking system date and time..."
|
||||
date
|
||||
sleep 2s
|
||||
}
|
||||
|
||||
settingLang() {
|
||||
sleep 2s
|
||||
clear
|
||||
echo "Setting LANG variable"
|
||||
echo "LANG=en_US.UTF-8" >> /etc/locale.conf
|
||||
echo "LC_COLLATE=C" >> /etc/locale.conf
|
||||
echo "Checking system language..."
|
||||
cat /etc/locale.conf || ignoreableErrors
|
||||
sleep 3s
|
||||
}
|
||||
|
||||
settingKeyboard() {
|
||||
sleep 2s
|
||||
clear
|
||||
echo "Setting console keyboard layout"
|
||||
echo "KEYMAP=us" > /etc/vconsole.conf
|
||||
echo "Checking system Keyboard Layout..."
|
||||
cat /etc/locale.conf || ignoreableErrors
|
||||
sleep 3s
|
||||
}
|
||||
|
||||
settingHostname() {
|
||||
sleep 2s
|
||||
clear
|
||||
echo "Enter your computer name: "
|
||||
read -r hostname
|
||||
echo "$hostname" > /etc/hostname
|
||||
echo "Checking hostname (/etc/hostname)"
|
||||
cat /etc/hostname || ignoreableErrors
|
||||
sleep 3s
|
||||
}
|
||||
|
||||
settingHosts() {
|
||||
sleep 2s
|
||||
clear
|
||||
echo "setting up hosts file"
|
||||
{
|
||||
echo "127.0.0.1 localhost"
|
||||
echo "::1 localhost"
|
||||
echo "127.0.1.1 $hostname.localdomain $hostname"
|
||||
} >> /etc/hosts
|
||||
|
||||
echo "checking /etc/hosts file"
|
||||
cat /etc/hosts || ignoreableErrors
|
||||
sleep 3s
|
||||
}
|
||||
|
||||
installingBootloader() {
|
||||
clear
|
||||
#if you are dualbooting, add os-prober with grub and efibootmgr
|
||||
echo "Installing grub networkmanager and zsh shell..."
|
||||
pacman -Sy --needed --noconfirm grub networkmanager-runit zsh || installationError
|
||||
sleep 3s
|
||||
}
|
||||
|
||||
enablingServices() {
|
||||
sleep 2s
|
||||
clear
|
||||
echo "Enabling NetworkManager"
|
||||
ln -s /etc/runit/sv/NetworkManager /etc/runit/runsvdir/default
|
||||
clear
|
||||
}
|
||||
|
||||
addingUser() {
|
||||
clear
|
||||
echo "Enter password for root user!"
|
||||
passwd
|
||||
sleep 1s
|
||||
clear
|
||||
echo "Adding regular user!"
|
||||
echo "Enter username to add a regular user: "
|
||||
read -r username
|
||||
useradd -m -g users -G wheel,audio,video,network,storage -s /bin/zsh "$username" || ignoreableErrors
|
||||
echo "To set password for $username, use different password than of root."
|
||||
echo "Enter password for $username! "
|
||||
passwd "$username"
|
||||
echo "NOTE: ALWAYS REMEMBER THIS USERNAME AND PASSWORD YOU PUT JUST NOW."
|
||||
sleep 3s
|
||||
}
|
||||
|
||||
sudoAccess() {
|
||||
sleep 2s
|
||||
clear
|
||||
echo "Giving sudo access to $username!"
|
||||
echo "$username ALL=(ALL) ALL" >> /etc/sudoers.d/"$username"
|
||||
}
|
||||
|
||||
copyingConfig() {
|
||||
sleep 2s
|
||||
clear
|
||||
echo "Copying config file to their absolute path..."
|
||||
mv /config/os-release /usr/lib/ || failed
|
||||
mv /config/grub /etc/default/grub || failed
|
||||
|
||||
mv /config/xinitrc /home/"$username"/.xinitrc || failed
|
||||
chown "$username":users /home/"$username"/.xinitrc || failed
|
||||
mv /config/zshrc /home/"$username"/.zshrc || failed
|
||||
chown "$username":users /home/"$username"/.zshrc || failed
|
||||
|
||||
sleep 1s
|
||||
mv /config /home/"$username"/.config/ || ignoreableErrors
|
||||
chown -R "$username":users /home/"$username"/.config || ignoreableErrors
|
||||
sleep 1s
|
||||
}
|
||||
|
||||
installingPackages() {
|
||||
sleep 2s
|
||||
clear
|
||||
echo "Installing require packages for metis-os"
|
||||
pacman -Sy --needed --noconfirm metis-dwm metis-st metis-dmenu metis-wallpapers xorg-server xorg-xinit xorg-xsetroot nerd-fonts-jetbrains-mono ttf-font-awesome pavucontrol pulseaudio pulseaudio-alsa firefox brillo linux-zen-headers linux-firmware curl git neovim zsh metis-slstatus picom-jonaburg-git acpi xwallpaper || installationError
|
||||
}
|
||||
|
||||
installingMicrocode() {
|
||||
sleep 2s
|
||||
clear
|
||||
if lscpu | grep "GenuineIntel"; then
|
||||
echo "Installing Intel microcode"
|
||||
pacman -S --noconfirm --needed intel-ucode || ignoreableErrors
|
||||
elif lscpu | grep "AuthenticAMD"; then
|
||||
echo "Installing AMD microcode"
|
||||
pacman -S --noconfirm --needed amd-ucode || ignoreableErrors
|
||||
fi
|
||||
}
|
||||
|
||||
configuringBootloader() {
|
||||
sleep 2s
|
||||
clear
|
||||
if [[ ! -d "/sys/firmware/efi" ]]; then
|
||||
echo "Legacy system detected..."
|
||||
echo "Enter the drive name to install bootloader in it. (eg: sda or nvme01 or vda or something similar)! "
|
||||
echo "NOTE: JUST GIVE DRIVE NAME (sda, nvme0n1, vda or something similar); NOT THE PARTITION NAME (sda1)"
|
||||
echo "Enter the drive name: "
|
||||
read -r grubdrive
|
||||
grub-install --target=i386-pc /dev/"$grubdrive"
|
||||
grub-mkconfig -o /boot/grub/grub.cfg
|
||||
else
|
||||
echo "UEFI system detected..."
|
||||
echo "Installing efibootmgr"
|
||||
pacman -Sy --needed --noconfirm efibootmgr dosfstools
|
||||
sleep 2s
|
||||
clear
|
||||
lsblk
|
||||
echo "Enter partition to install grub! (eg: sda2 or nvme0n1p3, vda4 or something similar): "
|
||||
read -r grubpartition
|
||||
mkfs.fat -F 32 /dev/"$grubpartition"
|
||||
mkdir -p /boot/efi
|
||||
mount /dev/"$grubpartition" /boot/efi
|
||||
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB --removable
|
||||
grub-mkconfig -o /boot/grub/grub.cfg
|
||||
fi
|
||||
sleep 2s
|
||||
}
|
||||
|
||||
graphicsDriver() {
|
||||
sleep 2s
|
||||
clear
|
||||
echo "Searching and Installing graphics driver if available"
|
||||
if lspci | grep "NVIDIA|GeForce"; then
|
||||
pacman -S --noconfirm --needed nvidia nvidia-utils || ignoreableErrors
|
||||
elif lspci | grep 'VGA' | grep -E "Radeon|AMD"; then
|
||||
pacman -S --noconfirm --needed xf86-video-amdgpu || ignoreableErrors
|
||||
elif lspci | grep "Integrated Graphics Controller"; then
|
||||
pacman -S --noconfirm --needed libva-intel-driver libvdpau-va-gl vulkan-intel libva-utils || ignoreableErrors
|
||||
elif lspci | grep -E "Intel Corporation UHD|Intel Corporation HD"; then
|
||||
pacman -S --needed --noconfirm libva-intel-driver libvdpau-va-gl vulkan-intel libva-intel-driver libva-utils || ignoreableErrors
|
||||
fi
|
||||
}
|
||||
|
||||
secondphaseCompleted(){
|
||||
sleep 2s
|
||||
clear
|
||||
echo "Second Phase Completed!"
|
||||
echo "Entering into Final Phase of Installation..."
|
||||
echo "Run the following commands to start final phase..."
|
||||
echo "1. exit"
|
||||
echo "2. final.sh"
|
||||
}
|
||||
|
||||
displayArt
|
||||
generatingLocale
|
||||
settingTimezone
|
||||
settingLang
|
||||
settingKeyboard
|
||||
settingHostname
|
||||
settingHosts
|
||||
installingBootloader
|
||||
addingUser
|
||||
sudoAccess
|
||||
copyingConfig
|
||||
installingPackages
|
||||
installingMicrocode
|
||||
configuringBootloader
|
||||
graphicsDriver
|
||||
secondphaseCompleted
|
|
@ -8,10 +8,7 @@ if cpuid -l; then
|
|||
title="$kopt";
|
||||
fi;
|
||||
done
|
||||
menuentry "ReadOnly: metis.x86_64 " --class=metis.x86_64 "$title @ro_opts@" {# set arguments above with the editor
|
||||
linux /boot/vmlinuz-$2
|
||||
initrd /boot/intel-ucode.img /boot/amd-ucode.img /boot/initramfs-x86_64.img
|
||||
}
|
||||
|
||||
menuentry "From Stick/HDD: metis.x86_64 " --class=metis.x86_64 "$title @rw_opts@" {# set arguments above with the editor
|
||||
linux /boot/vmlinuz-$2
|
||||
initrd /boot/intel-ucode.img /boot/amd-ucode.img /boot/initramfs-x86_64.img
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
# grub_theme=/boot/grub/themes/artix/theme.txt
|
||||
# grub_theme=/boot/grub/themes/metis/theme.txt
|
||||
timeout=-1
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue