LFS-RPM/setup.sh

191 lines
6.2 KiB
Bash
Executable File

#!/bin/bash
#-----------------------------------------------------------------------------
# Title: setup.sh
# Date: 2020-05-31
# Version: 2.0
# Author: chris@cromer.cl
# Options:
#-----------------------------------------------------------------------------
# Copyright 2020 Chris Cromer
# Copyright 2019 Baho Utot
#-----------------------------------------------------------------------------
# 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 <https://www.gnu.org/licenses/>.
#-----------------------------------------------------------------------------
set -o errexit # exit if error...insurance ;)
set -o nounset # exit if variable not initalized
set +h # disable hashall
#-----------------------------------------------------------------------------
# Common variables
PRGNAME=${0##*/} # Script name minus the path
TOPDIR=${PWD} # This directory
LFS=/mnt/lfs # Where LFS will be installed to
PARENT=/usr/src/LFS-RPM # Where build system wil live
SWAP_FILE_SIZE=1024 # Size of swap file in MB
#-----------------------------------------------------------------------------
# Common support functions
function die {
local _red="\\033[1;31m"
local _normal="\\033[0;39m"
[ -n "$*" ] && printf "${_red}$*${_normal}\n"
false
exit 1
}
function msg {
printf "%s\n" "${1}"
return
}
function msg_line {
printf "%s" "${1}"
return
}
function msg_failure {
local _red="\\033[1;31m"
local _normal="\\033[0;39m"
printf "${_red}%s${_normal}\n" "FAILURE"
exit 2
}
function msg_success {
local _green="\\033[1;32m"
local _normal="\\033[0;39m"
printf "${_green}%s${_normal}\n" "SUCCESS"
return
}
function msg_log {
printf "\n%s\n\n" "${1}" >> ${_logfile} 2>&1
return
}
function end_run {
local _green="\\033[1;32m"
local _normal="\\033[0;39m"
printf "${_green}%s${_normal}\n" "Run Complete - ${PRGNAME}"
return
}
#-----------------------------------------------------------------------------
# Local functions
function _sanity {
local size=""
msg_line " Checking to see if running as root: "
[ "$EUID" -ne 0 ] && die "You need be running as root for this script"
msg_success
msg_line " Checking if LFS variable is set: "
[ -v LFS ] || die "LFS environment variable missing/not set"
msg_success
msg_line " Checking if ${LFS} is mounted: "
mountpoint -q ${LFS} || die "${LFS} is not mounted"
msg_success
# check for swap space and add some in there is no swap
size=$(free | grep 'Swap:' | tr -d ' ' | cut -d ':' -f2)
case ${size} in
"000")
msg " Creating swap file: ${LFS}/swapfile: "
dd if=/dev/zero of=${LFS}/swapfile status=progress bs=1M count=${SWAP_FILE_SIZE}
chmod 600 ${LFS}/swapfile
mkswap ${LFS}/swapfile
swapon -v ${LFS}/swapfile
msg_success ;;
*) ;;
esac
return
}
function _chapter_3 {
# 3. Packages and Patches
# Introduction
# All Packages
# Needed Patches
local i=""
local list=""
if [ ${PWD} != ${LFS}${PARENT} ]; then
msg_line " Install build system: "
[ -d ${LFS}/${PARENT} ] || install -dm 755 ${LFS}${PARENT}
cp -ar ${TOPDIR}/BOOK ${LFS}${PARENT}
cp -ar ${TOPDIR}/SOURCES ${LFS}${PARENT}
cp -ar ${TOPDIR}/SPECS ${LFS}${PARENT}
cp -a ${TOPDIR}/README ${LFS}${PARENT}
cp -a ${TOPDIR}/*.sh ${LFS}${PARENT}
chmod +x ${LFS}${PARENT}/*.sh
msg_success
fi
# Create download list
while IFS= read -r i; do
list+="${i} "
done < "${TOPDIR}/BOOK/wget-list"
list+="ftp://anduin.linuxfromscratch.org/BLFS/popt/popt-1.16.tar.gz "
list+="http://ftp.rpm.org/releases/rpm-4.15.x/rpm-4.15.1.tar.bz2 "
list+="https://download.oracle.com/berkeley-db/db-5.3.28.tar.gz "
list+="https://ftp.gnu.org/gnu/cpio/cpio-2.13.tar.bz2 "
list+="https://ftp.gnu.org/gnu/wget/wget-1.20.3.tar.gz "
for i in ${list}; do
msg_line " Fetching: ${i}: "
wget --quiet --no-clobber --no-check-certificate --continue --directory-prefix=${LFS}${PARENT}/SOURCES ${i} || die "${PRGNAME}: Error: ${i}: Fetching tarball"
msg_success
done
# Create md5sum list
while read i;do
pushd ${LFS}${PARENT}/SOURCES > /dev/null 2>&1
printf "%s\n" "${i}" > md5sums
msg_line " Verifying: ${i#*' '}: "
md5sum --status -c md5sums && msg_success || msg_failure
popd > /dev/null 2>&1
done < "${TOPDIR}/BOOK/md5sums"
return
}
function _chapter_4 {
# 4. Final Preparations
# Introduction
# Creating the $LFS/tools Directory
# Adding the LFS User
# Setting Up the Environment
# About SBUs
# About the Test Suites
local target=""
# Creating the $LFS/tools Directory
msg_line " Checking for ${LFS}/tools directory: "
[ -d ${LFS}/tools ] || install -dm 755 ${LFS}/tools
msg_success
msg_line " Checking for /tools symlink: "
[ -h /tools ] || ln -s ${LFS}/tools /
msg_success
msg_line " Creating lfs user: "
getent group lfs > /dev/null 2>&1 || groupadd lfs > /dev/null 2>&1
getent passwd lfs > /dev/null 2>&1 || useradd -c 'LFS user' -g lfs -m -k /dev/null -s /bin/bash lfs > /dev/null 2>&1
getent passwd lfs > /dev/null 2>&1 && passwd --delete lfs > /dev/null 2>&1
msg_success
msg_line " Setting Up the Environment: "
[ -d /home/lfs ] || install -dm 755 /home/lfs
cat > /home/lfs/.bash_profile <<- EOF
exec env -i HOME=/home/lfs TERM=${TERM} PS1='\u:\w\$ ' /bin/bash
EOF
cat > /home/lfs/.bashrc <<- EOF
set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
LFS_TGT=$(uname -m)-lfs-${OSTYPE}
PATH=/tools/bin:/bin:/usr/bin
export LFS LC_ALL LFS_TGT PATH
EOF
chown -R lfs:lfs /home/lfs || die "${PRGNAME}: ${FUNCNAME}: FAILURE"
chown -R lfs:lfs ${LFS} || die "${PRGNAME}: ${FUNCNAME}: FAILURE"
msg_success
return
}
#-----------------------------------------------------------------------------
# Main line
LIST=""
LIST+="_sanity " # Sanity checks
LIST+="_chapter_3 " # Chapter 3 Packages and Patches
LIST+="_chapter_4 " # Chapter 4 Final Preparations
for i in ${LIST};do ${i};done
end_run