2019-11-23 02:25:47 +01:00
|
|
|
#!/bin/bash
|
2019-11-24 08:18:07 +01:00
|
|
|
#
|
|
|
|
#LICENSE#{{{
|
2019-11-23 02:25:47 +01:00
|
|
|
# Copyright (c) 2012 Tom Wambold
|
|
|
|
#
|
|
|
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
|
|
# of this software and associated documentation files (the "Software"), to deal
|
|
|
|
# in the Software without restriction, including without limitation the rights
|
|
|
|
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
|
|
# copies of the Software, and to permit persons to whom the Software is
|
|
|
|
# furnished to do so, subject to the following conditions:
|
|
|
|
#
|
|
|
|
# The above copyright notice and this permission notice shall be included in
|
|
|
|
# all copies or substantial portions of the Software.
|
|
|
|
#
|
|
|
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
|
|
# SOFTWARE.
|
2019-11-24 08:18:07 +01:00
|
|
|
#}}}
|
|
|
|
#ABOUT#{{{
|
2019-11-23 02:25:47 +01:00
|
|
|
# This script will set up an Arch installation with a 100 MB /boot partition
|
|
|
|
# and an encrypted LVM partition with swap and / inside. It also installs
|
|
|
|
# and configures systemd as the init system (removing sysvinit).
|
|
|
|
#
|
|
|
|
# You should read through this script before running it in case you want to
|
|
|
|
# make any modifications, in particular, the variables just below, and the
|
|
|
|
# following functions:
|
|
|
|
#
|
|
|
|
# partition_drive - Customize to change partition sizes (/boot vs LVM)
|
|
|
|
# setup_lvm - Customize for partitions inside LVM
|
|
|
|
# install_packages - Customize packages installed in base system
|
|
|
|
# (desktop environment, etc.)
|
|
|
|
# install_aur_packages - More packages after packer (AUR helper) is
|
|
|
|
# installed
|
|
|
|
# set_netcfg - Preload netcfg profiles
|
2019-11-24 08:18:07 +01:00
|
|
|
#}}}
|
|
|
|
# CONFIGURE THESE VARIABLES{{{
|
2019-11-23 02:25:47 +01:00
|
|
|
## ALSO LOOK AT THE install_packages FUNCTION TO SEE WHAT IS ACTUALLY INSTALLED
|
|
|
|
|
|
|
|
# Drive to install to.
|
|
|
|
DRIVE='/dev/sda'
|
|
|
|
|
|
|
|
# Hostname of the installed machine.
|
2019-11-24 07:54:02 +01:00
|
|
|
HOSTNAME='arch'
|
2019-11-23 02:25:47 +01:00
|
|
|
|
|
|
|
# Encrypt everything (except /boot). Leave blank to disable.
|
2019-11-24 07:54:02 +01:00
|
|
|
ENCRYPT_DRIVE=''
|
2019-11-23 02:25:47 +01:00
|
|
|
|
|
|
|
# Passphrase used to encrypt the drive (leave blank to be prompted).
|
|
|
|
DRIVE_PASSPHRASE=''
|
|
|
|
|
|
|
|
# Root password (leave blank to be prompted).
|
|
|
|
ROOT_PASSWORD=''
|
|
|
|
|
|
|
|
# Main user to create (by default, added to wheel group, and others).
|
|
|
|
USER_NAME='lelgenio'
|
|
|
|
|
|
|
|
# The main user's password (leave blank to be prompted).
|
|
|
|
USER_PASSWORD=''
|
|
|
|
|
|
|
|
# System timezone.
|
|
|
|
TIMEZONE='America/Sao_Paulo'
|
|
|
|
|
|
|
|
# Have /tmp on a tmpfs or not. Leave blank to disable.
|
|
|
|
# Only leave this blank on systems with very little RAM.
|
|
|
|
TMP_ON_TMPFS='TRUE'
|
|
|
|
|
2019-11-24 08:49:22 +01:00
|
|
|
KEYMAP='br-abnt2'
|
2019-11-23 02:25:47 +01:00
|
|
|
# KEYMAP='dvorak'
|
|
|
|
|
2019-11-24 07:54:02 +01:00
|
|
|
LANG=pt_BR.UTF-8
|
|
|
|
|
2019-11-23 02:25:47 +01:00
|
|
|
# Choose your video driver
|
|
|
|
# For Intel
|
|
|
|
VIDEO_DRIVER="i915"
|
|
|
|
# For nVidia
|
|
|
|
#VIDEO_DRIVER="nouveau"
|
|
|
|
# For ATI
|
|
|
|
#VIDEO_DRIVER="radeon"
|
|
|
|
# For generic stuff
|
|
|
|
#VIDEO_DRIVER="vesa"
|
2019-11-24 08:18:07 +01:00
|
|
|
#}}}
|
2019-11-24 08:01:32 +01:00
|
|
|
# Initial Setup{{{
|
|
|
|
# Base install{{{
|
|
|
|
setup() {
|
2019-11-23 02:25:47 +01:00
|
|
|
local boot_dev="$DRIVE"1
|
|
|
|
local lvm_dev="$DRIVE"2
|
|
|
|
|
|
|
|
echo 'Creating partitions'
|
|
|
|
partition_drive "$DRIVE"
|
|
|
|
|
|
|
|
if [ -n "$ENCRYPT_DRIVE" ]
|
|
|
|
then
|
|
|
|
local lvm_part="/dev/mapper/lvm"
|
|
|
|
|
|
|
|
if [ -z "$DRIVE_PASSPHRASE" ]
|
|
|
|
then
|
|
|
|
echo 'Enter a passphrase to encrypt the disk:'
|
|
|
|
stty -echo
|
|
|
|
read DRIVE_PASSPHRASE
|
|
|
|
stty echo
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo 'Encrypting partition'
|
|
|
|
encrypt_drive "$lvm_dev" "$DRIVE_PASSPHRASE" lvm
|
|
|
|
|
|
|
|
else
|
|
|
|
local lvm_part="$lvm_dev"
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo 'Setting up LVM'
|
|
|
|
setup_lvm "$lvm_part" vg00
|
|
|
|
|
|
|
|
echo 'Formatting filesystems'
|
|
|
|
format_filesystems "$boot_dev"
|
|
|
|
|
|
|
|
echo 'Mounting filesystems'
|
|
|
|
mount_filesystems "$boot_dev"
|
|
|
|
|
|
|
|
echo 'Installing base system'
|
|
|
|
install_base
|
|
|
|
|
|
|
|
echo 'Chrooting into installed system to continue setup...'
|
|
|
|
cp $0 /mnt/setup.sh
|
|
|
|
arch-chroot /mnt ./setup.sh chroot
|
|
|
|
|
|
|
|
if [ -f /mnt/setup.sh ]
|
|
|
|
then
|
|
|
|
echo 'ERROR: Something failed inside the chroot, not unmounting filesystems so you can investigate.'
|
|
|
|
echo 'Make sure you unmount everything before you try to run this script again.'
|
|
|
|
else
|
|
|
|
echo 'Unmounting filesystems'
|
|
|
|
unmount_filesystems
|
|
|
|
echo 'Done! Reboot system.'
|
|
|
|
fi
|
2019-11-24 08:23:12 +01:00
|
|
|
}
|
|
|
|
#}}}
|
2019-11-24 08:01:32 +01:00
|
|
|
# Partition Drive{{{
|
|
|
|
partition_drive() {
|
2019-11-24 07:54:02 +01:00
|
|
|
local dev="$1"; shift
|
2019-11-23 02:25:47 +01:00
|
|
|
|
2019-11-24 07:54:02 +01:00
|
|
|
# 100 MB /boot partition, everything else under LVM
|
|
|
|
parted -s "$dev" \
|
|
|
|
mklabel gpt \
|
|
|
|
mkpart boot 1 100M \
|
|
|
|
mkpart lvm 100M 100% \
|
|
|
|
set 1 boot on\
|
|
|
|
set 2 lvm on
|
2019-11-24 08:23:12 +01:00
|
|
|
}
|
|
|
|
#}}}
|
2019-11-24 08:01:32 +01:00
|
|
|
encrypt_drive #{{{
|
|
|
|
encrypt_drive() {
|
2019-11-24 07:54:02 +01:00
|
|
|
local dev="$1"; shift
|
|
|
|
local passphrase="$1"; shift
|
|
|
|
local name="$1"; shift
|
|
|
|
|
|
|
|
echo -en "$passphrase" | cryptsetup luksFormat "$dev"
|
|
|
|
echo -en "$passphrase" | cryptsetup luksOpen "$dev" lvm
|
2019-11-24 08:23:12 +01:00
|
|
|
}
|
|
|
|
#}}}
|
2019-11-24 08:01:32 +01:00
|
|
|
# setup_lvm{{{
|
|
|
|
setup_lvm() {
|
2019-11-24 07:54:02 +01:00
|
|
|
local partition="$1"; shift
|
|
|
|
local volgroup="$1"; shift
|
2019-11-23 02:25:47 +01:00
|
|
|
|
2019-11-24 07:54:02 +01:00
|
|
|
pvcreate "$partition"
|
|
|
|
vgcreate "$volgroup" "$partition"
|
2019-11-23 02:25:47 +01:00
|
|
|
|
2019-11-24 07:54:02 +01:00
|
|
|
# Create a 1GB swap partition
|
|
|
|
lvcreate -C y -L1G "$volgroup" -n swap
|
2019-11-23 02:25:47 +01:00
|
|
|
|
2019-11-24 07:54:02 +01:00
|
|
|
# Use the rest of the space for root
|
|
|
|
lvcreate -L '30G' "$volgroup" -n root
|
|
|
|
lvcreate -l '+100%FREE' "$volgroup" -n home
|
|
|
|
|
|
|
|
# Enable the new volumes
|
|
|
|
vgchange -ay
|
2019-11-24 08:23:12 +01:00
|
|
|
}
|
|
|
|
#}}}
|
2019-11-24 08:01:32 +01:00
|
|
|
# format_filesystems #{{{
|
|
|
|
format_filesystems() {
|
2019-11-24 07:54:02 +01:00
|
|
|
local boot_dev="$1"; shift
|
|
|
|
|
|
|
|
mkfs.fat -L boot "$boot_dev"
|
|
|
|
mkfs.ext4 -L root /dev/vg00/root
|
|
|
|
mkfs.ext4 -L home /dev/vg00/home
|
|
|
|
mkswap /dev/vg00/swap
|
2019-11-24 08:23:12 +01:00
|
|
|
}
|
|
|
|
#}}}
|
2019-11-24 08:01:32 +01:00
|
|
|
# mount_filesystems #{{{
|
|
|
|
mount_filesystems() {
|
2019-11-24 07:54:02 +01:00
|
|
|
local boot_dev="$1"; shift
|
|
|
|
|
|
|
|
mount /dev/vg00/root /mnt
|
|
|
|
mkdir /mnt/boot
|
|
|
|
mount "$boot_dev" /mnt/boot
|
|
|
|
swapon /dev/vg00/swap
|
2019-11-24 08:23:12 +01:00
|
|
|
}
|
|
|
|
#}}}
|
2019-11-24 08:01:32 +01:00
|
|
|
# install_base #{{{
|
|
|
|
install_base() {
|
2019-11-24 07:54:02 +01:00
|
|
|
pacstrap /mnt base base-devel\
|
|
|
|
linux-zen linux-firmware\
|
2019-11-24 08:49:22 +01:00
|
|
|
networkmanager cronie git
|
2019-11-24 07:54:02 +01:00
|
|
|
|
|
|
|
local packages=''
|
|
|
|
|
|
|
|
# On Intel processors
|
|
|
|
packages+=' intel-ucode'
|
|
|
|
if [ "$VIDEO_DRIVER" = "i915" ]
|
|
|
|
then
|
|
|
|
packages+=' xf86-video-intel libva-intel-driver'
|
|
|
|
elif [ "$VIDEO_DRIVER" = "nouveau" ]
|
|
|
|
then
|
|
|
|
packages+=' xf86-video-nouveau'
|
|
|
|
elif [ "$VIDEO_DRIVER" = "radeon" ]
|
|
|
|
then
|
|
|
|
packages+=' xf86-video-ati'
|
|
|
|
elif [ "$VIDEO_DRIVER" = "vesa" ]
|
|
|
|
then
|
|
|
|
packages+=' xf86-video-vesa'
|
|
|
|
fi
|
|
|
|
|
|
|
|
pacstrap /mnt $packages
|
2019-11-24 08:23:12 +01:00
|
|
|
}
|
|
|
|
#}}}
|
2019-11-24 08:01:32 +01:00
|
|
|
# unmount_filesystems #{{{
|
|
|
|
unmount_filesystems() {
|
2019-11-24 07:54:02 +01:00
|
|
|
umount /mnt/boot
|
|
|
|
umount /mnt
|
|
|
|
swapoff /dev/vg00/swap
|
|
|
|
vgchange -an
|
|
|
|
if [ -n "$ENCRYPT_DRIVE" ]
|
|
|
|
then
|
|
|
|
cryptsetup luksClose lvm
|
|
|
|
fi
|
2019-11-24 08:23:12 +01:00
|
|
|
}
|
|
|
|
#}}}
|
2019-11-24 07:54:02 +01:00
|
|
|
#}}}
|
|
|
|
# Configuration{{{
|
2019-11-24 08:01:32 +01:00
|
|
|
# configure() {#{{{
|
|
|
|
configure() {
|
2019-11-24 07:54:02 +01:00
|
|
|
local boot_dev="$DRIVE"1
|
|
|
|
local lvm_dev="$DRIVE"2
|
|
|
|
|
2019-11-23 02:25:47 +01:00
|
|
|
echo 'Updating pkgfile database'
|
|
|
|
update_pkgfile
|
|
|
|
|
2019-11-24 08:49:22 +01:00
|
|
|
if [ -z "$ROOT_PASSWORD" ]
|
|
|
|
then
|
|
|
|
echo 'Enter the root password:'
|
|
|
|
stty -echo
|
|
|
|
read ROOT_PASSWORD
|
|
|
|
stty echo
|
|
|
|
fi
|
|
|
|
echo 'Setting root password'
|
|
|
|
set_root_password "$ROOT_PASSWORD"
|
|
|
|
|
|
|
|
if [ -z "$USER_PASSWORD" ]
|
|
|
|
then
|
|
|
|
echo "Enter the password for user $USER_NAME"
|
|
|
|
stty -echo
|
|
|
|
read USER_PASSWORD
|
|
|
|
stty echo
|
|
|
|
fi
|
|
|
|
echo 'Creating initial user'
|
|
|
|
create_user "$USER_NAME" "$USER_PASSWORD"
|
|
|
|
|
|
|
|
echo 'Installing AUR packages'
|
|
|
|
# install_aur_packages
|
|
|
|
|
2019-11-23 02:25:47 +01:00
|
|
|
echo 'Setting hostname'
|
|
|
|
set_hostname "$HOSTNAME"
|
|
|
|
|
|
|
|
echo 'Setting timezone'
|
|
|
|
set_timezone "$TIMEZONE"
|
|
|
|
|
|
|
|
echo 'Setting locale'
|
2019-11-24 08:49:22 +01:00
|
|
|
set_locale
|
2019-11-23 02:25:47 +01:00
|
|
|
|
|
|
|
echo 'Setting console keymap'
|
|
|
|
set_keymap
|
|
|
|
|
|
|
|
echo 'Setting fstab'
|
|
|
|
set_fstab "$TMP_ON_TMPFS" "$boot_dev"
|
|
|
|
|
|
|
|
echo 'Setting initial modules to load'
|
|
|
|
set_modules_load
|
|
|
|
|
|
|
|
echo 'Configuring initial ramdisk'
|
|
|
|
set_initcpio
|
|
|
|
|
|
|
|
echo 'Setting initial daemons'
|
|
|
|
set_daemons "$TMP_ON_TMPFS"
|
|
|
|
|
|
|
|
echo 'Configuring bootloader'
|
|
|
|
set_syslinux "$lvm_dev"
|
|
|
|
|
|
|
|
echo 'Configuring sudo'
|
|
|
|
set_sudoers
|
|
|
|
|
|
|
|
echo 'Configuring slim'
|
|
|
|
set_slim
|
|
|
|
|
2019-11-24 08:49:22 +01:00
|
|
|
echo 'Clearing package tarballs'
|
|
|
|
clean_packages
|
2019-11-23 02:25:47 +01:00
|
|
|
|
|
|
|
rm /setup.sh
|
2019-11-24 08:23:12 +01:00
|
|
|
}
|
|
|
|
#}}}
|
2019-11-24 08:01:32 +01:00
|
|
|
# install_aur_packages() {#{{{
|
|
|
|
install_aur_packages() {
|
2019-11-23 02:25:47 +01:00
|
|
|
|
2019-11-24 07:54:02 +01:00
|
|
|
sudo pacman -S --needed \
|
|
|
|
git pacman-contrib \
|
|
|
|
base base-devel \
|
|
|
|
linux-zen linux-firmware
|
2019-11-23 02:25:47 +01:00
|
|
|
|
2019-11-24 07:54:02 +01:00
|
|
|
# getting yay
|
|
|
|
if [ ! -x /bin/yay ];
|
2019-11-23 02:25:47 +01:00
|
|
|
then
|
2019-11-24 07:54:02 +01:00
|
|
|
git clone http://aur.archlinux.org/yay.git ~/yay
|
|
|
|
cd ~/yay
|
|
|
|
makepkg -si
|
|
|
|
cd -
|
2019-11-23 02:25:47 +01:00
|
|
|
fi
|
|
|
|
|
2019-11-24 07:54:02 +01:00
|
|
|
# Install a lot of things
|
|
|
|
yay -Syu --noconfirm --needed \
|
|
|
|
sway light mako pulseaudio pavolume-git udiskie wofi-hg \
|
|
|
|
httpie jq python-keepmenu-git\
|
|
|
|
ttf-hack inter-font\
|
|
|
|
grim slurp wl-clipboard\
|
|
|
|
materia-custom-accent papirus-icon-theme-git\
|
|
|
|
papirus-folders-git capitaine-cursors \
|
|
|
|
termite neovim ranger mimeo atool\
|
|
|
|
zsh powerline-fonts\
|
|
|
|
qutebrowser \
|
|
|
|
steam lutris \
|
|
|
|
gimp kdenlive mpv mpd mpc ncmpcpp
|
|
|
|
|
2019-11-24 08:23:12 +01:00
|
|
|
}
|
|
|
|
#}}}
|
2019-11-24 08:01:32 +01:00
|
|
|
# clean_packages() {#{{{
|
|
|
|
clean_packages() {
|
2019-11-23 02:25:47 +01:00
|
|
|
yes | pacman -Scc
|
2019-11-24 08:23:12 +01:00
|
|
|
}
|
|
|
|
#}}}
|
2019-11-24 08:01:32 +01:00
|
|
|
# update_pkgfile() {#{{{
|
|
|
|
update_pkgfile() {
|
2019-11-23 02:25:47 +01:00
|
|
|
pkgfile -u
|
2019-11-24 08:23:12 +01:00
|
|
|
}
|
|
|
|
#}}}
|
2019-11-24 08:01:32 +01:00
|
|
|
# set_hostname() {#{{{
|
|
|
|
set_hostname() {
|
2019-11-23 02:25:47 +01:00
|
|
|
local hostname="$1"; shift
|
|
|
|
|
|
|
|
echo "$hostname" > /etc/hostname
|
|
|
|
|
2019-11-24 07:54:02 +01:00
|
|
|
cat > /etc/hosts <<EOF
|
|
|
|
127.0.0.1 localhost.localdomain localhost $hostname
|
|
|
|
::1 localhost.localdomain localhost $hostname
|
|
|
|
EOF
|
2019-11-24 08:23:12 +01:00
|
|
|
}
|
|
|
|
#}}}
|
2019-11-24 08:01:32 +01:00
|
|
|
# set_timezone() {#{{{
|
|
|
|
set_timezone() {
|
2019-11-23 02:25:47 +01:00
|
|
|
local timezone="$1"; shift
|
|
|
|
|
|
|
|
ln -sT "/usr/share/zoneinfo/$TIMEZONE" /etc/localtime
|
2019-11-24 08:23:12 +01:00
|
|
|
}
|
|
|
|
#}}}
|
2019-11-24 08:15:00 +01:00
|
|
|
# set_locale() {#{{{
|
|
|
|
set_locale() {
|
2019-11-24 08:01:32 +01:00
|
|
|
# echo "LANG=$LANG" >> /etc/locale.conf
|
|
|
|
echo "LANG=$LANG" >> /etc/locale.
|
2019-11-24 07:54:02 +01:00
|
|
|
echo "LC_COLLATE=C" >> /etc/locale.conf
|
2019-11-23 02:25:47 +01:00
|
|
|
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
|
2019-11-24 07:54:02 +01:00
|
|
|
echo "$LANG UTF-8" >> /etc/locale.gen
|
2019-11-23 02:25:47 +01:00
|
|
|
locale-gen
|
2019-11-24 08:23:12 +01:00
|
|
|
}
|
|
|
|
#}}}
|
2019-11-24 08:01:32 +01:00
|
|
|
# set_keymap() {#{{{
|
|
|
|
set_keymap() {
|
2019-11-24 08:49:22 +01:00
|
|
|
localectl set-keymap $KEYMAP
|
2019-11-24 08:23:12 +01:00
|
|
|
}
|
|
|
|
#}}}
|
2019-11-24 08:01:32 +01:00
|
|
|
# set_fstab() {#{{{
|
|
|
|
set_fstab() {
|
2019-11-23 02:25:47 +01:00
|
|
|
local tmp_on_tmpfs="$1"; shift
|
|
|
|
local boot_dev="$1"; shift
|
|
|
|
|
|
|
|
local boot_uuid=$(get_uuid "$boot_dev")
|
|
|
|
|
|
|
|
cat > /etc/fstab <<EOF
|
|
|
|
#
|
|
|
|
# /etc/fstab: static file system information
|
|
|
|
#
|
|
|
|
# <file system> <dir> <type> <options> <dump> <pass>
|
|
|
|
|
2019-11-24 07:54:02 +01:00
|
|
|
/dev/vg00/swap none swap sw 0 0
|
|
|
|
/dev/vg00/root / ext4 rw,relatime 0 1
|
|
|
|
/dev/vg00/home /home ext4 rw,relatime 0 2
|
2019-11-23 02:25:47 +01:00
|
|
|
|
|
|
|
UUID=$boot_uuid /boot ext2 defaults,relatime 0 2
|
|
|
|
EOF
|
2019-11-24 08:23:12 +01:00
|
|
|
}
|
|
|
|
#}}}
|
2019-11-24 08:01:32 +01:00
|
|
|
# set_initcpio() {#{{{
|
|
|
|
set_initcpio() {
|
2019-11-23 02:25:47 +01:00
|
|
|
local vid
|
|
|
|
|
|
|
|
if [ "$VIDEO_DRIVER" = "i915" ]
|
|
|
|
then
|
|
|
|
vid='i915'
|
|
|
|
elif [ "$VIDEO_DRIVER" = "nouveau" ]
|
|
|
|
then
|
|
|
|
vid='nouveau'
|
|
|
|
elif [ "$VIDEO_DRIVER" = "radeon" ]
|
|
|
|
then
|
|
|
|
vid='radeon'
|
|
|
|
fi
|
|
|
|
|
|
|
|
local encrypt=""
|
|
|
|
if [ -n "$ENCRYPT_DRIVE" ]
|
|
|
|
then
|
|
|
|
encrypt="encrypt"
|
|
|
|
fi
|
|
|
|
|
|
|
|
cat > /etc/mkinitcpio.conf <<EOF
|
|
|
|
# vim:set ft=sh
|
|
|
|
# MODULES
|
|
|
|
# The following modules are loaded before any boot hooks are
|
|
|
|
# run. Advanced users may wish to specify all system modules
|
|
|
|
# in this array. For instance:
|
2019-11-24 07:54:02 +01:00
|
|
|
# MODULES=(piix ide_disk reiserfs)
|
|
|
|
MODULES=(ext4 $vid)
|
2019-11-23 02:25:47 +01:00
|
|
|
|
|
|
|
# BINARIES
|
|
|
|
# This setting includes any additional binaries a given user may
|
|
|
|
# wish into the CPIO image. This is run last, so it may be used to
|
|
|
|
# override the actual binaries included by a given hook
|
|
|
|
# BINARIES are dependency parsed, so you may safely ignore libraries
|
2019-11-24 07:54:02 +01:00
|
|
|
BINARIES=()
|
2019-11-23 02:25:47 +01:00
|
|
|
|
|
|
|
# FILES
|
|
|
|
# This setting is similar to BINARIES above, however, files are added
|
|
|
|
# as-is and are not parsed in any way. This is useful for config files.
|
2019-11-24 07:54:02 +01:00
|
|
|
FILES=()
|
2019-11-23 02:25:47 +01:00
|
|
|
|
|
|
|
# HOOKS
|
|
|
|
# This is the most important setting in this file. The HOOKS control the
|
|
|
|
# modules and scripts added to the image, and what happens at boot time.
|
|
|
|
# Order is important, and it is recommended that you do not change the
|
|
|
|
# order in which HOOKS are added. Run 'mkinitcpio -H <hook name>' for
|
|
|
|
# help on a given hook.
|
|
|
|
# 'base' is _required_ unless you know precisely what you are doing.
|
|
|
|
# 'udev' is _required_ in order to automatically load modules
|
|
|
|
# 'filesystems' is _required_ unless you specify your fs modules in MODULES
|
|
|
|
# Examples:
|
|
|
|
## This setup specifies all modules in the MODULES setting above.
|
|
|
|
## No raid, lvm2, or encrypted root is needed.
|
2019-11-24 07:54:02 +01:00
|
|
|
# HOOKS=(base)
|
2019-11-23 02:25:47 +01:00
|
|
|
#
|
|
|
|
## This setup will autodetect all modules for your system and should
|
|
|
|
## work as a sane default
|
2019-11-24 07:54:02 +01:00
|
|
|
# HOOKS=(base udev autodetect block filesystems)
|
2019-11-23 02:25:47 +01:00
|
|
|
#
|
|
|
|
## This setup will generate a 'full' image which supports most systems.
|
|
|
|
## No autodetection is done.
|
2019-11-24 07:54:02 +01:00
|
|
|
# HOOKS=(base udev block filesystems)
|
2019-11-23 02:25:47 +01:00
|
|
|
#
|
|
|
|
## This setup assembles a pata mdadm array with an encrypted root FS.
|
|
|
|
## Note: See 'mkinitcpio -H mdadm' for more information on raid devices.
|
2019-11-24 07:54:02 +01:00
|
|
|
# HOOKS=(base udev block mdadm encrypt filesystems)
|
2019-11-23 02:25:47 +01:00
|
|
|
#
|
|
|
|
## This setup loads an lvm2 volume group on a usb device.
|
2019-11-24 07:54:02 +01:00
|
|
|
# HOOKS=(base udev block lvm2 filesystems)
|
2019-11-23 02:25:47 +01:00
|
|
|
#
|
|
|
|
## NOTE: If you have /usr on a separate partition, you MUST include the
|
|
|
|
# usr, fsck and shutdown hooks.
|
2019-11-24 07:54:02 +01:00
|
|
|
HOOKS=(base udev autodetect modconf block $encrypt lvm2 filesystems keyboard fsck)
|
2019-11-23 02:25:47 +01:00
|
|
|
|
|
|
|
# COMPRESSION
|
|
|
|
# Use this to compress the initramfs image. By default, gzip compression
|
|
|
|
# is used. Use 'cat' to create an uncompressed image.
|
|
|
|
#COMPRESSION="gzip"
|
|
|
|
#COMPRESSION="bzip2"
|
|
|
|
#COMPRESSION="lzma"
|
|
|
|
#COMPRESSION="xz"
|
|
|
|
#COMPRESSION="lzop"
|
2019-11-24 07:54:02 +01:00
|
|
|
#COMPRESSION="lz4"
|
2019-11-23 02:25:47 +01:00
|
|
|
|
|
|
|
# COMPRESSION_OPTIONS
|
|
|
|
# Additional options for the compressor
|
2019-11-24 07:54:02 +01:00
|
|
|
#COMPRESSION_OPTIONS=()
|
2019-11-23 02:25:47 +01:00
|
|
|
EOF
|
|
|
|
|
2019-11-24 07:54:02 +01:00
|
|
|
mkinitcpio -P
|
2019-11-24 08:23:12 +01:00
|
|
|
}
|
|
|
|
#}}}
|
2019-11-24 08:01:32 +01:00
|
|
|
# set_daemons() {#{{{
|
|
|
|
set_daemons() {
|
2019-11-23 02:25:47 +01:00
|
|
|
local tmp_on_tmpfs="$1"; shift
|
|
|
|
|
2019-11-24 07:54:02 +01:00
|
|
|
systemctl enable cronie.service NetworkManager.service
|
2019-11-23 02:25:47 +01:00
|
|
|
|
|
|
|
if [ -z "$tmp_on_tmpfs" ]
|
|
|
|
then
|
|
|
|
systemctl mask tmp.mount
|
|
|
|
fi
|
2019-11-24 08:23:12 +01:00
|
|
|
}
|
|
|
|
#}}}
|
2019-11-24 08:01:32 +01:00
|
|
|
# set_bootctl() {#{{{
|
|
|
|
set_bootctl() {
|
2019-11-23 02:25:47 +01:00
|
|
|
local lvm_dev="$1"; shift
|
|
|
|
|
|
|
|
local lvm_uuid=$(get_uuid "$lvm_dev")
|
|
|
|
|
|
|
|
local crypt=""
|
|
|
|
if [ -n "$ENCRYPT_DRIVE" ]
|
|
|
|
then
|
|
|
|
# Load in resources
|
2019-11-24 07:54:02 +01:00
|
|
|
crypt="root=UUID=$lvm_uuid"
|
2019-11-23 02:25:47 +01:00
|
|
|
fi
|
|
|
|
|
2019-11-24 07:54:02 +01:00
|
|
|
cat > /boot/loader/entries/arch.conf <<EOF
|
|
|
|
title arch
|
2019-11-23 02:25:47 +01:00
|
|
|
|
2019-11-24 07:54:02 +01:00
|
|
|
linux vmlinuz-linux-zen
|
|
|
|
initrd intel-ucode.img
|
|
|
|
initrd initramfs-linux-zen.img
|
2019-11-23 02:25:47 +01:00
|
|
|
|
2019-11-24 07:54:02 +01:00
|
|
|
options $crypt
|
|
|
|
#options quiet splash loglevel=3 rd.udev.log_priority=3 vt.global_cursor_default=0 $crypt
|
|
|
|
EOF
|
|
|
|
|
|
|
|
bootctl install
|
2019-11-24 08:23:12 +01:00
|
|
|
}
|
|
|
|
#}}}
|
2019-11-24 08:01:32 +01:00
|
|
|
# set_sudoers() {#{{{
|
|
|
|
set_sudoers() {
|
2019-11-23 02:25:47 +01:00
|
|
|
cat > /etc/sudoers <<EOF
|
|
|
|
## sudoers file.
|
|
|
|
##
|
|
|
|
## This file MUST be edited with the 'visudo' command as root.
|
|
|
|
## Failure to use 'visudo' may result in syntax or file permission errors
|
|
|
|
## that prevent sudo from running.
|
|
|
|
##
|
|
|
|
## See the sudoers man page for the details on how to write a sudoers file.
|
|
|
|
##
|
|
|
|
|
|
|
|
##
|
|
|
|
## Host alias specification
|
|
|
|
##
|
|
|
|
## Groups of machines. These may include host names (optionally with wildcards),
|
|
|
|
## IP addresses, network numbers or netgroups.
|
|
|
|
# Host_Alias WEBSERVERS = www1, www2, www3
|
|
|
|
|
|
|
|
##
|
|
|
|
## User alias specification
|
|
|
|
##
|
|
|
|
## Groups of users. These may consist of user names, uids, Unix groups,
|
|
|
|
## or netgroups.
|
|
|
|
# User_Alias ADMINS = millert, dowdy, mikef
|
|
|
|
|
|
|
|
##
|
|
|
|
## Cmnd alias specification
|
|
|
|
##
|
|
|
|
## Groups of commands. Often used to group related commands together.
|
|
|
|
# Cmnd_Alias PROCESSES = /usr/bin/nice, /bin/kill, /usr/bin/renice, \
|
|
|
|
# /usr/bin/pkill, /usr/bin/top
|
2019-11-24 07:54:02 +01:00
|
|
|
# Cmnd_Alias REBOOT = /sbin/halt, /sbin/reboot, /sbin/poweroff
|
2019-11-23 02:25:47 +01:00
|
|
|
|
|
|
|
##
|
|
|
|
## Defaults specification
|
|
|
|
##
|
|
|
|
## You may wish to keep some of the following environment variables
|
|
|
|
## when running commands via sudo.
|
|
|
|
##
|
|
|
|
## Locale settings
|
|
|
|
# Defaults env_keep += "LANG LANGUAGE LINGUAS LC_* _XKB_CHARSET"
|
|
|
|
##
|
|
|
|
## Run X applications through sudo; HOME is used to find the
|
|
|
|
## .Xauthority file. Note that other programs use HOME to find
|
|
|
|
## configuration files and this may lead to privilege escalation!
|
|
|
|
# Defaults env_keep += "HOME"
|
|
|
|
##
|
|
|
|
## X11 resource path settings
|
|
|
|
# Defaults env_keep += "XAPPLRESDIR XFILESEARCHPATH XUSERFILESEARCHPATH"
|
|
|
|
##
|
|
|
|
## Desktop path settings
|
|
|
|
# Defaults env_keep += "QTDIR KDEDIR"
|
|
|
|
##
|
|
|
|
## Allow sudo-run commands to inherit the callers' ConsoleKit session
|
|
|
|
# Defaults env_keep += "XDG_SESSION_COOKIE"
|
|
|
|
##
|
|
|
|
## Uncomment to enable special input methods. Care should be taken as
|
|
|
|
## this may allow users to subvert the command being run via sudo.
|
|
|
|
# Defaults env_keep += "XMODIFIERS GTK_IM_MODULE QT_IM_MODULE QT_IM_SWITCHER"
|
|
|
|
##
|
2019-11-24 07:54:02 +01:00
|
|
|
## Uncomment to use a hard-coded PATH instead of the user's to find commands
|
|
|
|
# Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
|
|
|
##
|
|
|
|
## Uncomment to send mail if the user does not enter the correct password.
|
|
|
|
# Defaults mail_badpass
|
|
|
|
##
|
2019-11-23 02:25:47 +01:00
|
|
|
## Uncomment to enable logging of a command's output, except for
|
|
|
|
## sudoreplay and reboot. Use sudoreplay to play back logged sessions.
|
|
|
|
# Defaults log_output
|
|
|
|
# Defaults!/usr/bin/sudoreplay !log_output
|
|
|
|
# Defaults!/usr/local/bin/sudoreplay !log_output
|
2019-11-24 07:54:02 +01:00
|
|
|
# Defaults!REBOOT !log_output
|
2019-11-23 02:25:47 +01:00
|
|
|
|
|
|
|
##
|
|
|
|
## Runas alias specification
|
|
|
|
##
|
|
|
|
|
|
|
|
##
|
|
|
|
## User privilege specification
|
|
|
|
##
|
|
|
|
root ALL=(ALL) ALL
|
|
|
|
|
|
|
|
## Uncomment to allow members of group wheel to execute any command
|
2019-11-24 07:54:02 +01:00
|
|
|
# %wheel ALL=(ALL) ALL
|
2019-11-23 02:25:47 +01:00
|
|
|
|
|
|
|
## Same thing without a password
|
2019-11-24 07:54:02 +01:00
|
|
|
%wheel ALL=(ALL) NOPASSWD: ALL
|
2019-11-23 02:25:47 +01:00
|
|
|
|
|
|
|
## Uncomment to allow members of group sudo to execute any command
|
2019-11-24 07:54:02 +01:00
|
|
|
# %sudo ALL=(ALL) ALL
|
2019-11-23 02:25:47 +01:00
|
|
|
|
|
|
|
## Uncomment to allow any user to run sudo if they know the password
|
|
|
|
## of the user they are running the command as (root by default).
|
|
|
|
# Defaults targetpw # Ask for the password of the target user
|
|
|
|
# ALL ALL=(ALL) ALL # WARNING: only use this together with 'Defaults targetpw'
|
|
|
|
|
|
|
|
## Read drop-in files from /etc/sudoers.d
|
|
|
|
## (the '#' here does not indicate a comment)
|
|
|
|
#includedir /etc/sudoers.d
|
|
|
|
EOF
|
|
|
|
|
|
|
|
chmod 440 /etc/sudoers
|
2019-11-24 08:23:12 +01:00
|
|
|
}
|
|
|
|
#}}}
|
2019-11-24 08:01:32 +01:00
|
|
|
# set_root_password() {#{{{
|
|
|
|
set_root_password() {
|
2019-11-23 02:25:47 +01:00
|
|
|
local password="$1"; shift
|
|
|
|
|
|
|
|
echo -en "$password\n$password" | passwd
|
2019-11-24 08:23:12 +01:00
|
|
|
}
|
|
|
|
#}}}
|
2019-11-24 08:01:32 +01:00
|
|
|
# create_user() {#{{{
|
|
|
|
create_user() {
|
2019-11-23 02:25:47 +01:00
|
|
|
local name="$1"; shift
|
|
|
|
local password="$1"; shift
|
|
|
|
|
|
|
|
useradd -m -s /bin/zsh -G adm,systemd-journal,wheel,rfkill,games,network,video,audio,optical,floppy,storage,scanner,power,adbusers,wireshark "$name"
|
|
|
|
echo -en "$password\n$password" | passwd "$name"
|
2019-11-24 08:23:12 +01:00
|
|
|
}
|
|
|
|
#}}}
|
2019-11-24 08:01:32 +01:00
|
|
|
# get_uuid() {#{{{
|
|
|
|
get_uuid() {
|
2019-11-23 02:25:47 +01:00
|
|
|
blkid -o export "$1" | grep UUID | awk -F= '{print $2}'
|
2019-11-24 08:23:12 +01:00
|
|
|
}
|
|
|
|
#}}}
|
2019-11-24 07:54:02 +01:00
|
|
|
#}}}
|
2019-11-23 02:25:47 +01:00
|
|
|
set -ex
|
|
|
|
|
2019-11-24 08:01:32 +01:00
|
|
|
if [ ! "$USER" == "root" ]
|
|
|
|
then
|
2019-11-24 08:18:07 +01:00
|
|
|
echo "whoa there cowboy(girl)"
|
|
|
|
echo "You almost lost your stuff!!"
|
2019-11-24 08:01:32 +01:00
|
|
|
exit 1
|
|
|
|
fi
|
2019-11-24 08:20:17 +01:00
|
|
|
|
2019-11-23 02:25:47 +01:00
|
|
|
if [ "$1" == "chroot" ]
|
|
|
|
then
|
|
|
|
configure
|
2019-11-24 07:54:02 +01:00
|
|
|
elif [ "$1" == "pkg" ]
|
|
|
|
then
|
|
|
|
install_aur_packages
|
2019-11-23 02:25:47 +01:00
|
|
|
else
|
|
|
|
setup
|
|
|
|
fi
|
2019-11-24 07:54:02 +01:00
|
|
|
|
2019-11-24 08:23:12 +01:00
|
|
|
# vim:foldmethod=marker
|