mirror of https://github.com/jcmdln/gein
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
246 lines
7.2 KiB
246 lines
7.2 KiB
#!/usr/bin/env sh |
|
|
|
## Commands |
|
Emerge="emerge -q" |
|
Read="read -ep" |
|
|
|
## Gein Defaults |
|
Grub_Target="/dev/sda" |
|
Hostname="gein" |
|
Locale="en_US.UTF-8 UTF-8" |
|
Swap_Size="4G" |
|
Time_Zone="America/New_York" |
|
Video_Cards="intel" |
|
|
|
## Gentoo Defaults |
|
#Base_Url="https://raw.githubusercontent.com/jcmdln/gein/master" |
|
#Kernel_Config="$Base_Url/usr/src/linux/4.12-config" |
|
#Make_Conf="$Base_Url/etc/portage/make.conf" |
|
#Package_Env="$Base_Url/etc/portage/package.env" |
|
#Package_Use="$Base_Url/etc/portage/package.use" |
|
Stage3_Arch="amd64" |
|
Stage3_Date="20171005" |
|
Stage3_Url="http://distfiles.gentoo.org/releases" |
|
|
|
|
|
Bootstrap() { |
|
## Confirm the user has setup their disks |
|
echo "Please ensure that you have performed the following: " && \ |
|
echo " - Edited the environment variables at the top of this script." |
|
echo " - Partitioned and mounted your disk(s)." && \ |
|
$Read "Proceed with installation? [Y/N]: " Proceed && \ |
|
if echo $Proceed | grep -iq "^n"; then exit; fi |
|
|
|
## Set time via ntpd |
|
ntpd -q -g |
|
|
|
## Download and extract stage3 tarball |
|
cd /mnt/gentoo && \ |
|
wget ${Stage3_Url}/${Stage3_Arch}/autobuilds/${Stage3_Date}/stage3-${Stage3_Arch}-${Stage3_Date}.tar.bz2 && \ |
|
tar xvjpf stage3-*.tar.bz2 --xattrs --numeric-owner |
|
|
|
## Mount hardware devices |
|
mount -t proc /proc /mnt/gentoo/proc && \ |
|
mount --rbind /sys /mnt/gentoo/sys && \ |
|
mount --make-rslave /mnt/gentoo/sys && \ |
|
mount --rbind /dev /mnt/gentoo/dev && \ |
|
mount --make-rslave /mnt/gentoo/dev |
|
|
|
## Setup '/swapfile' |
|
Swap_File="/mnt/gentoo/swapfile" && \ |
|
if [ ! -e $Swap_File ]; then |
|
fallocate -l $Swap_Size $Swap_File && \ |
|
mkswap $Swap_File && \ |
|
chmod 0600 $Swap_File && \ |
|
swapon $Swap_File |
|
fi |
|
|
|
## Configure Portage |
|
if [ ! -z $Make_Conf ]; then |
|
wget $Make_Conf -O /mnt/gentoo/etc/portage/make.conf |
|
fi && \ |
|
if [ ! -z $Package_Use ]; then |
|
rm -rf /mnt/gentoo/etc/portage/package.use && \ |
|
wget $Package_Use -O /mnt/gentoo/etc/portage/package.use |
|
fi && \ |
|
if [ ! -z $Package_Env ]; then |
|
wget $Package_Env -O /mnt/gentoo/etc/portage/package.env |
|
fi |
|
|
|
## Setup Portage mirrors |
|
mkdir -vp /mnt/gentoo/etc/portage/repos.conf && \ |
|
cp -v /mnt/gentoo/usr/share/portage/config/repos.conf \ |
|
/mnt/gentoo/etc/portage/repos.conf/gentoo.conf && \ |
|
cp -vL /etc/resolv.conf /mnt/gentoo/etc/ |
|
|
|
## Add 'gein-extras' script |
|
mkdir -vp /mnt/gentoo/usr/local/sbin && \ |
|
wget $Base_URL/usr/local/sbin/gein-extras -O /usr/local/sbin/gein-extras |
|
|
|
## Chroot into '/mnt/gentoo' |
|
cd /mnt/gentoo && \ |
|
echo "chroot'ing into /mnt/gentoo..." |
|
chroot /mnt/gentoo /bin/bash |
|
} |
|
|
|
|
|
Minimal() { |
|
## Adjust make.conf to store the specified video card and # of CPU cores |
|
sed -i "s/Video_Cards/${Video_Cards}/g; |
|
s/Make_Opts/-j$(grep -c ^processor /proc/cpuinfo)/g" /etc/portage/make.conf |
|
|
|
## Reload profile and update PS1 |
|
source /etc/profile && \ |
|
export PS1="(chroot) $PS1" |
|
|
|
## Sync Portage and select profile |
|
emerge-webrsync && \ |
|
eselect profile list && \ |
|
$Read "Which profile? [Default is 1]: " Target_Profile && \ |
|
if [ -z $Target_Profile ]; then |
|
Target_Profile="1" |
|
fi |
|
eselect profile set $Target_Profile && \ |
|
$Emerge --update --deep --newuse @world |
|
|
|
## Set desired timezone |
|
echo "${Time_Zone}" > /etc/timezone && \ |
|
emerge --config sys-libs/timezone-data |
|
|
|
## Set desired locales |
|
echo "${Locale}" > /etc/locale.gen && \ |
|
locale-gen && \ |
|
locale -a && \ |
|
eselect locale list && \ |
|
$Read "Target locale: " Target_Locale && \ |
|
eselect locale set ${Target_Locale} |
|
|
|
## Update environment |
|
env-update && \ |
|
source /etc/profile && \ |
|
export PS1="(chroot) $PS1" |
|
|
|
## Emerge/install Linux kernel and modules |
|
$Emerge sys-kernel/gentoo-sources \ |
|
sys-kernel/linux-firmware \ |
|
sys-apps/pciutils \ |
|
sys-kernel/genkernel && \ |
|
if grep -Rqi 'intel' /proc/cpuinfo; then |
|
$Emerge intel-microcode |
|
fi && \ |
|
cd /usr/src/linux && \ |
|
if [ -z $Kernel_Config ]; then |
|
make defconfig && \ |
|
make menuconfig |
|
else |
|
wget $Kernel_config -O /usr/src/linux/.config |
|
fi && \ |
|
make && \ |
|
make modules_install && \ |
|
make install && \ |
|
genkernel --install initramfs |
|
|
|
## Configure '/etc/fstab/' |
|
echo "/swapfile none swap sw 0 0" >> /etc/fstab && \ |
|
nano /etc/fstab |
|
|
|
## Install neworking packages & |
|
$Emerge --noreplace net-misc/netifrc && \ |
|
$Emerge net-misc/dhcpcd |
|
|
|
## Set desired hostname and update '/etc/hosts' |
|
echo hostname="${Hostname}" > /etc/conf.d/hostname |
|
|
|
## Configure and install Grub |
|
$Emerge sys-boot/grub:2 && \ |
|
grub-install $Grub_Target && \ |
|
grub-mkconfig -o /boot/grub/grub.cfg |
|
|
|
## Set root password |
|
passwd |
|
} |
|
|
|
|
|
Desktop() { |
|
## Install Desktop drivers and packages |
|
$Emerge dev-util/cmake \ |
|
x11-base/xorg-drivers \ |
|
x11-misc/wmctrl \ |
|
x11-misc/xdotool && \ |
|
env-update && \ |
|
source /etc/profile && \ |
|
export PS1="(chroot) $PS1" && \ |
|
$Emerge app-admin/sudo \ |
|
app-editors/vim \ |
|
app-misc/ranger \ |
|
app-misc/tmux \ |
|
app-shells/zsh \ |
|
app-shells/zsh-completions \ |
|
media-fonts/dejavu \ |
|
media-gfx/feh \ |
|
media-gfx/scrot \ |
|
media-libs/alsa-lib \ |
|
media-sound/alsa-utils \ |
|
media-video/mpv \ |
|
net-misc/youtube-dl \ |
|
www-client/chromium \ |
|
x11-apps/xrandr \ |
|
x11-misc/dmenu \ |
|
x11-misc/i3lock \ |
|
x11-misc/i3status \ |
|
x11-misc/xclip \ |
|
x11-terms/rxvt-unicode \ |
|
x11-wm/i3 |
|
} |
|
|
|
|
|
Laptop() { |
|
$Emerge app-laptop/laptop-mode-tools \ |
|
net-misc/connman \ |
|
net-wireless/wpa_supplicant \ |
|
x11-apps/xbacklight && \ |
|
rc-update add laptop_mode default |
|
} |
|
|
|
|
|
Cleanup() { |
|
## Install eclean |
|
$Emerge app-portage/gentoolkit \ |
|
app-admin/eclean-kernel && \ |
|
|
|
## Update @world, remove unused packages, and clean |
|
$Emerge -uDN @world && \ |
|
$Emerge --depclean && \ |
|
$Emerge --update --changed-use --deep @world && \ |
|
eclean packages && \ |
|
eclean-dist --deep --fetch-restricted |
|
|
|
## Remove junk created during installation |
|
rm -rf /stage3*.tar.bz2 |
|
} |
|
|
|
|
|
### Execution #################################### |
|
|
|
shopt -s nocasematch && \ |
|
case $1 in |
|
bootstrap | -b) Bootstrap;; |
|
minimal | -m) Minimal && Cleanup;; |
|
desktop | -d) Minimal && Desktop && Cleanup;; |
|
laptop | -l) Minimal && Desktop && Laptop && Cleanup;; |
|
|
|
help | --help | -h) |
|
echo "Try reading the script along with the Gentoo documentation:" |
|
echo "https://www.gentoo.org/support/documentation/" |
|
;; |
|
|
|
*) printf "gein - GEntoo INstaller\n\n" |
|
echo " -h help Suggests to read the script and Gentoo documentation" |
|
printf "\nRequired first step:\n" |
|
echo " -b bootstrap Bootstrap the stage3 tarball" |
|
printf "\nPost-bootstrap options:\n" |
|
echo " -m minimal Only install required gentoo packages" |
|
echo " -d desktop Install required and desktop packages" |
|
echo " -l laptop Install required, desktop, and laptop packages" |
|
;; |
|
esac && shopt -u nocasematch
|
|
|