# kernelUpdateScript.sh
# Morris, Jarod
# Fall 2020
#
# Description
# Installs current linux stable kernel source code onto Redhat EC2 instance
# Specifications
# -g
# git clone kernel for download
# -v
# display current stable kernel version
# -h
# display list of options
# -D Subdir
# downloads kernel source into give subdirectory
#
# Examples
# ./kernelUpdateScript.sh -v : Displays version
# ./kernelUpdateScript.sh -g -D /src/2020/install : install kernel using git to spec dir
# ./kernelUpdateScript.sh -v -h : Displays help
# ./kernelUpdateScript.sh -D /src/test : installs kernel using wget into directory
# ./kernelUpdateScript.sh -g : installs kernel to default dir using git
# nohup bash ./kernelUpdateScript.sh 2>nohup.err & : use nohup to avoid timeouts
#
#!/bin/bash
# reading command line arguments
while getopts gvhD: flag
do
case "$flag" in
g) git=true
;;
v) version=true;;
h) help=true;;
D) directory=${OPTARG}
isDirectory=true;;
*)
echo "Invalid input"
exit 1 ;;
esac
done
# check for help / version
if [ "$help" == true ]
then
echo "usage: ./p01.sh [OPTIONS]
-g git clone kernel for download
-v display current stable kernel version
-h display list of options
-D Subdir installs kernel into give subdirectory
Examples:
./p01.sh -v : Displays version
./p01.sh -g -D /src/2020/install : install kernel using git to spec dir
./p01.sh -v -h : Displays help
./p01.sh -D /src/test : installs kernel using wget into directory
./p01.sh -g : installs kernel to default dir using git"
# should exit if help is called, even with multiple commands
exit 0
fi
# scrape website for stable release
curl -s https://www.kernel.org/ | grep -A 2 '
stable:<' \
| grep -Po '(?<=)[^<]*' > version.out
kernelversion=$(cat version.out)
#rm version.out
if [ "$version" == true ]
then
echo $kernelversion
# should exit if version is called, even with multiple commands
exit 0
fi
# create swap
sudo swapoff -a
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# update system /install development tools
sudo yum group install -y "Development Tools"
sudo yum install -y ncurses-devel make gcc bc bison flex \
elfutils-libelf-devel openssl-devel grub2 wget
sudo yum -y upgrade
mkdir src
cd src
# install ccache
wget https://github.com/ccache/ccache/releases/download/v3.7.11/ccache-3.7.11.tar.xz
wget \
https://github.com/ccache/ccache/releases/download/v3.7.11/ccache-3.7.11.tar.xz.asc
# verify ccache
gpg2 --locate-keys torvalds@kernel.org gregkh@kernel.org joel@debian.org
gpg --verify ccache-3.7.11.tar.xz.asc ccache-3.7.11.tar.xz
gpg --keyserver pgpkeys.mit.edu --list-sigs joel@debian.org | grep RSAKEY
echo -e "trust\n5\ny\nq\n" | gpg --command-fd 0 --edit-key joel@debian.org
gpg --verify ccache-3.7.11.tar.xz.asc ccache-3.7.11.tar.xz
unxz ccache-3.7.11.tar.xz
tar xvf ccache-3.7.11.tar
cd ccache-3.7.11
./configure
yes '' | make
yes '' | make install
# handle possible directory
if [ "$isDirectory" == true ]
then
if [ -d "$directory" ]
then
cd "$directory"
else
mkdir -p "$HOME""$directory"
cd "$HOME""$directory"
fi
fi
# check for git
if [ "$git" == true ]
then
git clone -v --depth 1 --branch v"$kernelversion" \
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
cd linux-stable
# verify keys
git verify-tag v"$kernelversion"
gpg --keyserver pgpkeys.mit.edu --list-sigs gregkh@kernel.org | grep RSAKEY
echo -e "trust\n5\ny\nq\n" | gpg --command-fd 0 --edit-key gregkh@kernel.org
git verify-tag v"$kernelversion"
git checkout v"$kernelversion"
else
wget \
https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-"$kernelversion".tar.xz
wget \
https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-"$kernelversion".tar.sign
unxz linux-"$kernelversion".tar.xz
gpg --verify linux-"$kernelversion".tar.sign linux-"$kernelversion".tar
gpg --keyserver pgpkeys.mit.edu --list-sigs gregkh@kernel.org | grep RSAKEY
echo -e "trust\n5\ny\nq\n" | gpg --command-fd 0 --edit-key gregkh@kernel.org
gpg --verify linux-"$kernelversion".tar.sign linux-"$kernelversion".tar
tar xvf linux-"$kernelversion".tar
rm linux-"$kernelversion".tar
cd linux-"$kernelversion"
fi
cp -v /boot/config-$(uname -r) .config
yes '' | make localmodconfig
scripts/config --disable DEBUG_INFO
sudo rm /etc/dracut.conf.d/xen.conf
yes '' | nohup sudo make -j 2 && sudo make modules_install -j 2 \
&& sudo make install -j 2 &
exit 0
|