diff options
-rw-r--r-- | chapter7/cleanup.sh | 9 | ||||
-rw-r--r-- | createdirs.sh | 88 | ||||
-rw-r--r-- | env.sh | 4 | ||||
-rw-r--r-- | essential.sh | 71 | ||||
-rw-r--r-- | insidechroot.sh | 145 | ||||
-rwxr-xr-x | lfs.sh | 13 | ||||
-rw-r--r-- | mountvirtfs.sh | 2 | ||||
-rw-r--r-- | umountvirtfs.sh | 28 |
8 files changed, 204 insertions, 156 deletions
diff --git a/chapter7/cleanup.sh b/chapter7/cleanup.sh index 0a5ec86..93e8a88 100644 --- a/chapter7/cleanup.sh +++ b/chapter7/cleanup.sh @@ -13,10 +13,11 @@ else sudo rm -rf "${LFS}"/usr/share/info >/dev/null 2>&1 sudo rm -rf "${LFS}"/usr/share/man >/dev/null 2>&1 - sudo strip --strip-debug "${LFS}"/usr/lib/* >/dev/null 2>&1 - sudo strip --strip-unneeded "${LFS}"/usr/bin/* >/dev/null 2>&1 - sudo strip --strip-unneeded "${LFS}"/usr/sbin/* >/dev/null 2>&1 - sudo strip --strip-unneeded "${LFS}"/tools/bin/* >/dev/null 2>&1 + #find "${LFS}"/usr/lib -type f -executable -print | xargs sudo strip --strip-debug + sudo strip --strip-debug "${LFS}"/usr/lib/* >/dev/null 2>&1 || true + sudo strip --strip-unneeded "${LFS}"/usr/bin/* >/dev/null 2>&1 || true + sudo strip --strip-unneeded "${LFS}"/usr/sbin/* >/dev/null 2>&1 || true + sudo strip --strip-unneeded "${LFS}"/tools/bin/* >/dev/null 2>&1 || true printf "%b" "${IGRN}OK${RST}\n" touch "${LFS}"/sources/chapter7/cleanup >/dev/null 2>&1 diff --git a/createdirs.sh b/createdirs.sh new file mode 100644 index 0000000..9542443 --- /dev/null +++ b/createdirs.sh @@ -0,0 +1,88 @@ +#!/bin/bash + +set -e + +pushd "${LFS}" > /dev/null || exit 1 + +printf "%b" "${GRN}Creating directories${RST}... " +if [[ -f sources/createdirs ]]; then + printf "%b" "\n ${IGRN}Directories already created${RST}\n" +else + sudo mkdir -p boot + sudo mkdir -p home + sudo mkdir -p mnt + sudo mkdir -p opt + sudo mkdir -p srv + + sudo mkdir -p etc/opt + sudo mkdir -p etc/opt/sysconfig + sudo mkdir -p lib/firmware + sudo mkdir -p media/floppy + sudo mkdir -p media/cdrom + sudo mkdir -p usr/bin + sudo mkdir -p usr/include + sudo mkdir -p usr/lib + sudo mkdir -p usr/sbin + sudo mkdir -p usr/src + sudo mkdir -p usr/local/bin + sudo mkdir -p usr/local/include + sudo mkdir -p usr/local/lib + sudo mkdir -p usr/local/sbin + sudo mkdir -p usr/local/src + sudo mkdir -p usr/share/color + sudo mkdir -p usr/share/dict + sudo mkdir -p usr/share/doc + sudo mkdir -p usr/share/info + sudo mkdir -p usr/share/locale + sudo mkdir -p usr/share/man + sudo mkdir -p usr/share/man/man1 + sudo mkdir -p usr/share/man/man2 + sudo mkdir -p usr/share/man/man3 + sudo mkdir -p usr/share/man/man4 + sudo mkdir -p usr/share/man/man5 + sudo mkdir -p usr/share/man/man6 + sudo mkdir -p usr/share/man/man7 + sudo mkdir -p usr/share/man/man8 + sudo mkdir -p usr/share/misc + sudo mkdir -p usr/share/terminfo + sudo mkdir -p usr/share/zoneinfo + sudo mkdir -p usr/local/share/color + sudo mkdir -p usr/local/share/dict + sudo mkdir -p usr/local/share/doc + sudo mkdir -p usr/local/share/info + sudo mkdir -p usr/local/share/locale + sudo mkdir -p usr/local/share/man + sudo mkdir -p usr/local/share/man/man1 + sudo mkdir -p usr/local/share/man/man2 + sudo mkdir -p usr/local/share/man/man3 + sudo mkdir -p usr/local/share/man/man4 + sudo mkdir -p usr/local/share/man/man5 + sudo mkdir -p usr/local/share/man/man6 + sudo mkdir -p usr/local/share/man/man7 + sudo mkdir -p usr/local/share/man/man8 + sudo mkdir -p usr/local/share/misc + sudo mkdir -p usr/local/share/terminfo + sudo mkdir -p usr/local/share/zoneinfo + sudo mkdir -p var/cache + sudo mkdir -p var/local + sudo mkdir -p var/log + sudo mkdir -p var/mail + sudo mkdir -p var/opt + sudo mkdir -p var/spool + sudo mkdir -p var/lib/color + sudo mkdir -p var/lib/misc + sudo mkdir -p var/lib/locate + + sudo ln -sf run var/run + sudo ln -sf run/lock var/lock + + sudo install -d -m 0750 root + sudo install -d -m 1777 tmp + sudo install -d -m 1777 var/tmp + + printf "%b" " ${IGRN}OK${RST}\n" + touch sources/createdirs + +fi + +popd >/dev/null >/dev/null || exit 1 @@ -39,8 +39,12 @@ MAKEFLAGS="-j ${numjobs}" # Set spinner type (0-12 in funtions.sh) SPINNER="0" + +TESTERUID="$(id -u)" \ + export PS1 LC_ALL LFS LFS_TGT PATH CONFIG_SITE export LFS_VER LFS_DISK LFS_FS LFS_PART LFS_PWD NUMPROCS MAKEFLAGS export SPINNER +export TESTERUID unset numjobs diff --git a/essential.sh b/essential.sh new file mode 100644 index 0000000..0b8afce --- /dev/null +++ b/essential.sh @@ -0,0 +1,71 @@ +#!/bin/bash + +set -e + + +pushd "${LFS}" >/dev/null || exit 1 + +printf "%b" "${GRN}Creating essential files and symbolic links${RST}... " +if [[ -f "sources/essential" ]]; then + printf "%b" "\n ${IGRN}Essential files and symbolic links already created${RST}\n" +else + + + sudo ln -sf proc/self/mounts etc/mtab + sudo bash -c 'echo "127.0.0.1 localhost $(hostname)" > etc/hosts' + + sudo bash -c 'cat > etc/passwd << "EOF" +root:x:0:0:root:/root:/bin/bash +bin:x:1:1:bin:/dev/null:/bin/false +daemon:x:6:6:Daemon User:/dev/null:/bin/false +messagebus:x:18:18:D-Bus Message Daemon User:/run/dbus:/bin/false +uuidd:x:80:80:UUID Generation Daemon User:/dev/null:/bin/false +nobody:x:99:99:Unprivileged User:/dev/null:/bin/false +EOF' + + sudo bash -c 'cat > etc/group << "EOF" +root:x:0: +bin:x:1:daemon +sys:x:2: +kmem:x:3: +tape:x:4: +tty:x:5: +daemon:x:6: +floppy:x:7: +disk:x:8: +lp:x:9: +dialout:x:10: +audio:x:11: +video:x:12: +utmp:x:13: +usb:x:14: +cdrom:x:15: +adm:x:16: +messagebus:x:18: +input:x:24: +mail:x:34: +kvm:x:61: +uuidd:x:80: +wheel:x:97: +nogroup:x:99: +users:x:999: +EOF' + + sudo bash -c 'echo "tester:x:"'"${TESTERUID}"'":101::/home/tester:/bin/bash" >> etc/passwd' + sudo bash -c 'echo "tester:x:101:" >> etc/group' + sudo install -o "${TESTERUID}" -d home/tester + + sudo touch var/log/btmp + sudo touch var/log/lastlog + sudo touch var/log/faillog + sudo touch var/log/tmp + sudo chgrp utmp var/log/lastlog + sudo chmod 664 var/log/lastlog + sudo chmod 600 var/log/btmp + + sudo touch sources/essential + sudo printf "%b" "${IGRN}OK${RST}\n" + +fi + +popd >/dev/null || exit 1 diff --git a/insidechroot.sh b/insidechroot.sh index a2fb9df..28cf64f 100644 --- a/insidechroot.sh +++ b/insidechroot.sh @@ -7,147 +7,9 @@ source /sources/functions.sh printf "%b" "${CYN}SUCCESSFULLY ENTERED ${RED}CHROOT${RST}!\n" -if [[ "${CHAPTER}" -eq 7 ]]; then - printf "%b" "${GRN}Creating directories${RST}... " - if [[ -f /sources/createdirs ]]; then - printf "%b" "\n ${IGRN}Directories already created${RST}\n" - else - mkdir -p /boot - mkdir -p /home - mkdir -p /mnt - mkdir -p /opt - mkdir -p /srv - - mkdir -p /etc/opt - mkdir -p /etc/opt/sysconfig - mkdir -p /lib/firmware - mkdir -p /media/floppy - mkdir -p /media/cdrom - mkdir -p /usr/bin - mkdir -p /usr/include - mkdir -p /usr/lib - mkdir -p /usr/sbin - mkdir -p /usr/src - mkdir -p /usr/local/bin - mkdir -p /usr/local/include - mkdir -p /usr/local/lib - mkdir -p /usr/local/sbin - mkdir -p /usr/local/src - mkdir -p /usr/share/color - mkdir -p /usr/share/dict - mkdir -p /usr/share/doc - mkdir -p /usr/share/info - mkdir -p /usr/share/locale - mkdir -p /usr/share/man - mkdir -p /usr/share/man/man1 - mkdir -p /usr/share/man/man2 - mkdir -p /usr/share/man/man3 - mkdir -p /usr/share/man/man4 - mkdir -p /usr/share/man/man5 - mkdir -p /usr/share/man/man6 - mkdir -p /usr/share/man/man7 - mkdir -p /usr/share/man/man8 - mkdir -p /usr/share/misc - mkdir -p /usr/share/terminfo - mkdir -p /usr/share/zoneinfo - mkdir -p /usr/local/share/color - mkdir -p /usr/local/share/dict - mkdir -p /usr/local/share/doc - mkdir -p /usr/local/share/info - mkdir -p /usr/local/share/locale - mkdir -p /usr/local/share/man - mkdir -p /usr/local/share/man/man1 - mkdir -p /usr/local/share/man/man2 - mkdir -p /usr/local/share/man/man3 - mkdir -p /usr/local/share/man/man4 - mkdir -p /usr/local/share/man/man5 - mkdir -p /usr/local/share/man/man6 - mkdir -p /usr/local/share/man/man7 - mkdir -p /usr/local/share/man/man8 - mkdir -p /usr/local/share/misc - mkdir -p /usr/local/share/terminfo - mkdir -p /usr/local/share/zoneinfo - mkdir -p /var/cache - mkdir -p /var/local - mkdir -p /var/log - mkdir -p /var/mail - mkdir -p /var/opt - mkdir -p /var/spool - mkdir -p /var/lib/color - mkdir -p /var/lib/misc - mkdir -p /var/lib/locate - - ln -sf /run /var/run - ln -sf /run/lock /var/lock - - install -d -m 0750 /root - install -d -m 1777 /tmp /var/tmp - - printf "%b" " ${IGRN}OK${RST}\n" - touch /sources/createdirs - fi - - printf "%b" "${GRN}Creating essential files and symbolic links${RST}... " - if [[ -f "/sources/essential" ]]; then - printf "%b" "\n ${IGRN}Essential files and symbolic links already created${RST}\n" - else - ln -sf /proc/self/mounts /etc/mtab - echo "127.0.0.1 localhost $(hostname)" > /etc/hosts - - cat > /etc/passwd << "EOF" -root:x:0:0:root:/root:/bin/bash -bin:x:1:1:bin:/dev/null:/bin/false -daemon:x:6:6:Daemon User:/dev/null:/bin/false -messagebus:x:18:18:D-Bus Message Daemon User:/run/dbus:/bin/false -uuidd:x:80:80:UUID Generation Daemon User:/dev/null:/bin/false -nobody:x:99:99:Unprivileged User:/dev/null:/bin/false -EOF +pushd /sources >/dev/null || exit 1 - cat > /etc/group << "EOF" -root:x:0: -bin:x:1:daemon -sys:x:2: -kmem:x:3: -tape:x:4: -tty:x:5: -daemon:x:6: -floppy:x:7: -disk:x:8: -lp:x:9: -dialout:x:10: -audio:x:11: -video:x:12: -utmp:x:13: -usb:x:14: -cdrom:x:15: -adm:x:16: -messagebus:x:18: -input:x:24: -mail:x:34: -kvm:x:61: -uuidd:x:80: -wheel:x:97: -nogroup:x:99: -users:x:999: -EOF - - echo "tester:x:${TESTERUID}:101::/home/tester:/bin/bash" >> /etc/passwd - echo "tester:x:101:" >> /etc/group - install -o tester -d /home/tester - - touch /var/log/btmp - touch /var/log/lastlog - touch /var/log/faillog - touch /var/log/tmp - chgrp utmp /var/log/lastlog - chmod 664 /var/log/lastlog - chmod 600 /var/log/btmp - - touch /sources/essential - printf "%b" "${IGRN}OK${RST}\n" - fi - - cd /sources || exit 1 +if [[ "${CHAPTER}" -eq 7 ]]; then # Chapter 7 printf "%b" "\n${IWHT}============ ${IGRN}Building ${IYLW}Chapter 7${IWHT} \ @@ -160,8 +22,7 @@ EOF exit 1 fi done - - exit 7 + else printf "%b" "Do Chapter 8, 9 and 10 stuff here.\n" fi @@ -143,6 +143,8 @@ chmod ugo+x insidechroot.sh printf "%b" "\n${CYN}PREPARING ${RED}CHROOT${CYN} ENVIRONMENT${RST}...\n" sudo ./preparechroot.sh "${LFS}" +source createdirs.sh +source essential.sh printf "%b" "\n${CYN}ENTERING ${RED}CHROOT${CYN} ENVIRONMENT${RST}...\n" sleep 3 @@ -155,19 +157,13 @@ sudo chroot "${LFS}" /usr/bin/env \ NUMPROCS="${NUMPROCS}" \ MAKEFLAGS="${MAKEFLAGS}" \ SPINNER="${SPINNER}" \ - TESTERUID="$(id -u)" \ /bin/bash --login +h -c "/sources/insidechroot.sh 7" retval=$? printf "%b" "\n${CYN}EXITED ${RED}CHROOT${RST} ENVIRONMENT...${RST}\n" # Cleanup and Backup if chapter 7 successfully finished -if [[ "$retval" -eq 7 ]]; then - printf "%b" "${GRN}Unmounting Virtual Kernel Filesystems...\n" - sudo umount "${LFS}"/dev/pts - sudo umount "${LFS}"/dev/ - sudo umount "${LFS}"/run - sudo umount "${LFS}"/sys - sudo umount "${LFS}"/proc +if [[ "$retval" -eq 0 ]]; then + source umountvirtfs.sh printf "%b" "\n${IWHT}======= ${IYLW}Chapter 7 ${IGRN}Cleanup and Backup \ ${IWHT}=======${RST}\n" @@ -192,7 +188,6 @@ sudo chroot "${LFS}" /usr/bin/env \ NUMPROCS="${NUMPROCS}" \ MAKEFLAGS="${MAKEFLAGS}" \ SPINNER="${SPINNER}" \ - TESTERUID="$(id -u)" \ /bin/bash --login +h -c "/sources/insidechroot.sh 8" printf "%b" "\n${CYN}EXITED ${RED}CHROOT${CYN} ENVIRONMENT${RST}...\n" diff --git a/mountvirtfs.sh b/mountvirtfs.sh index ecf328a..237990d 100644 --- a/mountvirtfs.sh +++ b/mountvirtfs.sh @@ -1,6 +1,6 @@ #!/bin/bash -printf "%b" "${GRN}Mounting virtual kernel filesystems${RST}... " +printf "%b" "${GRN}Mounting virtual kernel filesystems${RST}...\n" if ! mountpoint "${LFS}"/dev >/dev/null 2>&1; then sudo mount --bind /dev "${LFS}"/dev else diff --git a/umountvirtfs.sh b/umountvirtfs.sh new file mode 100644 index 0000000..8eb969f --- /dev/null +++ b/umountvirtfs.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +printf "%b" "${GRN}Unmounting virtual kernel filesystems${RST}...\n" +if mountpoint "${LFS}"/dev/pts >/dev/null 2>&1; then + sudo umount "${LFS}"/dev/pts +else + printf "%b" " ${IYLW}${LFS}/dev/pts${IGRN} is already unmounted${RST}\n" +fi +if mountpoint "${LFS}"/dev >/dev/null 2>&1; then + sudo umount "${LFS}"/dev +else + printf "%b" " ${IYLW}${LFS}/dev${IGRN} is already unmounted${RST}\n" +fi +if mountpoint "${LFS}"/proc >/dev/null 2>&1; then + sudo umount "${LFS}"/proc +else + printf "%b" " ${IYLW}${LFS}/proc${IGRN} is already unmounted${RST}\n" +fi +if mountpoint "${LFS}"/sys >/dev/null 2>&1; then + sudo umount "${LFS}"/sys +else + printf "%b" " ${IYLW}${LFS}/sys${IGRN} is already unmounted${RST}\n" +fi +if mountpoint "${LFS}"/run >/dev/null 2>&1; then + sudo umount "${LFS}"/run +else + printf "%b" " ${IYLW}${LFS}/run${IGRN} is already unmounted${RST}\n" +fi |