|
|
- #!/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
|