cookutils annotate lib/libmodular.sh @ rev 549

libcookorder.sh: Add comments to explain lots of functions. More to come.
author Christopher Rogers <slaxemulator@gmail.com>
date Tue Oct 16 15:02:10 2012 +0000 (2012-10-16)
parents 2b6720a968c8
children c2a20cfc1197
rev   line source
slaxemulator@533 1 #!/bin/sh
slaxemulator@533 2
slaxemulator@533 3
slaxemulator@533 4 INIT=$ROOTFS/init
slaxemulator@533 5 FLAVOR_MOD="justx gtkonly core"
slaxemulator@533 6 UNION=$ROOTFS/union
slaxemulator@533 7 LASTBR=$INIT
slaxemulator@533 8 MODULES_DIR=$ROOTFS/modules
slaxemulator@537 9 CDNAME="slitaz"
slaxemulator@537 10 SGNFILE=$ROOTCD/${CDNAME}/livecd.sgn
slaxemulator@533 11 KEY_FILES="init liblinuxlive linuxrc"
slaxemulator@546 12 LOG=$DISTRO/log
slaxemulator@539 13 EXT="xz"
slaxemulator@539 14 COMPRESSION="xz -Xbcj x86"
slaxemulator@539 15 MKOPTION="-b 512k"
slaxemulator@539 16 #NCPU="-processors 3"
slaxemulator@533 17
slaxemulator@533 18 error () { echo -e "\033[1;31;40m!!! \033[1;37;40m$@\033[1;0m"; }
slaxemulator@533 19 warn () { echo -e "\033[1;33;40m*** \033[1;37;40m$@\033[1;0m"; }
slaxemulator@533 20 info () { echo -e "\033[1;32;40m>>> \033[1;37;40m$@\033[1;0m"; }
slaxemulator@533 21
slaxemulator@533 22 initramfs () {
slaxemulator@533 23
slaxemulator@533 24 FLAVOR=${1%.flavor}
slaxemulator@537 25 if [ ! -f "$FLAVORS_REPOSITORY/$FLAVOR/receipt" ]; then
slaxemulator@533 26 error "error: $FLAVORS_REPOSITORY/$FLAVOR/receipt doesn't exist, aborting."
slaxemulator@533 27 exit 1
slaxemulator@533 28 fi
slaxemulator@533 29
slaxemulator@533 30 if [ -d ${INIT} ]; then
slaxemulator@533 31 rm -Rf ${INIT}
slaxemulator@533 32 fi
slaxemulator@533 33
slaxemulator@533 34 if [ ! -d ${INIT} ]; then
slaxemulator@533 35 mkdir -p $INIT
slaxemulator@533 36 fi
slaxemulator@533 37
slaxemulator@546 38 if [ -d ${LOG} ]; then
slaxemulator@546 39 rm -Rf $LOG
slaxemulator@546 40 fi
slaxemulator@546 41
slaxemulator@546 42 if [ ! -d ${LOG} ]; then
slaxemulator@546 43 mkdir -p $LOG
slaxemulator@546 44 fi
slaxemulator@546 45
slaxemulator@533 46 info "Making bootable image"
slaxemulator@533 47 [ -f $LOG/initramfs.log ] && rm -f $LOG/initramfs.log
slaxemulator@533 48 cat "$FLAVORS_REPOSITORY/$FLAVOR/packages.list" | grep -v "^#" | while read pkgname; do
slaxemulator@533 49 if [ ! -f ${INIT}${INSTALLED}/${pkgname}/files.list ]; then
slaxemulator@537 50 tazpkg get-install $pkgname --root=$INIT 2>/dev/null | tee -a $LOG/initramfs.log
slaxemulator@533 51 sleep 1
slaxemulator@533 52 else
slaxemulator@533 53 info "${pkgname} installed" | tee -a $LOG/initramfs.log
slaxemulator@533 54 fi
slaxemulator@533 55 done
slaxemulator@533 56
slaxemulator@533 57 if [ -d $INIT ]; then
slaxemulator@533 58 for i in $KEY_FILES; do
slaxemulator@533 59 if [ -f $INIT/$i ]; then
slaxemulator@533 60 cp -af $INIT/$i $INITRAMFS
slaxemulator@533 61 fi
slaxemulator@533 62 done
slaxemulator@533 63 fi
slaxemulator@533 64
slaxemulator@533 65 if [ -f $INIT/liblinuxlive ]; then
slaxemulator@533 66 sed -i "s|^#MIRROR|MIRROR=$MIRROR_DIR|g" $INIT/liblinuxlive
slaxemulator@533 67 fi
slaxemulator@533 68
slaxemulator@533 69 }
slaxemulator@533 70
slaxemulator@533 71 slitaz_union () {
slaxemulator@533 72
slaxemulator@533 73 if [ -d ${MODULES_DIR}/${mod}${INSTALLED} ]; then
slaxemulator@533 74 echo "${mod} module exist. Moving on."
slaxemulator@533 75 elif [ ! -d ${MODULES_DIR}/${mod}${INSTALLED} ]; then
slaxemulator@533 76 if [ -f "$FLAVORS_REPOSITORY/${mod}/packages.list" ]; then
slaxemulator@533 77 [ -f ${LOG}/${mod}-current.log ] && rm -f ${LOG}/${mod}-current.log
slaxemulator@533 78 cat "$FLAVORS_REPOSITORY/${mod}/packages.list" | grep -v "^#" | while read pkgname; do
slaxemulator@533 79 if [ ! -f ${UNION}${INSTALLED}/${pkgname}/files.list ]; then
slaxemulator@537 80 tazpkg get-install $pkgname --root=${UNION} | tee -a ${LOG}/${mod}-current.log
slaxemulator@533 81 sleep 1
slaxemulator@533 82 else
slaxemulator@533 83 info "${pkgname} installed" | tee -a ${LOG}/${mod}-current.log
slaxemulator@533 84 fi
slaxemulator@533 85 done
slaxemulator@533 86 fi
slaxemulator@533 87 fi
slaxemulator@533 88 }
slaxemulator@533 89
slaxemulator@533 90 union () {
slaxemulator@533 91 if [ "$FLAVOR_MOD" ]; then
slaxemulator@533 92 UNION_MODULES="$FLAVOR_MOD"
slaxemulator@533 93 else
slaxemulator@533 94 error "Error: no modules assigned in config for profile."
slaxemulator@533 95 exit 1
slaxemulator@533 96 fi
slaxemulator@533 97
slaxemulator@533 98
slaxemulator@533 99 mkdir -p $UNION
slaxemulator@533 100 mkdir -p $ROOTCD/${CDNAME}/base
slaxemulator@533 101 mkdir -p $ROOTCD/${CDNAME}/modules
slaxemulator@533 102 mkdir -p $ROOTCD/${CDNAME}/optional
slaxemulator@533 103 mkdir -p $ROOTCD/${CDNAME}/rootcopy
slaxemulator@533 104 mkdir -p $ROOTCD/${CDNAME}/tmp
slaxemulator@533 105 mkdir -p $LASTBR
slaxemulator@533 106
slaxemulator@533 107 touch $SGNFILE
slaxemulator@533 108
slaxemulator@533 109 [ -f $INSTALLED/aufs/receipt ] || tazpkg get-install aufs --forced
slaxemulator@533 110 modprobe aufs
slaxemulator@533 111 if [ $? -ne 0 ]; then
slaxemulator@533 112 error "Error loading Union filesystem module. (aufs)"
slaxemulator@533 113 exit 1
slaxemulator@533 114 fi
slaxemulator@537 115
slaxemulator@533 116 # $INIT is now $LASTBR
slaxemulator@533 117 # This will be copyed to /mnt/memory/changes on boot
slaxemulator@533 118 initramfs init-modular
slaxemulator@533 119
slaxemulator@533 120 mount -t aufs -o br:${LASTBR}=rw aufs ${UNION}
slaxemulator@533 121 if [ $? -ne 0 ]; then
slaxemulator@533 122 error "Error mounting $union."
slaxemulator@533 123 exit 1
slaxemulator@533 124 fi
slaxemulator@533 125
slaxemulator@533 126 info "====> Installing packages to '$UNION'"
slaxemulator@533 127 for mod in $UNION_MODULES; do
slaxemulator@533 128
slaxemulator@533 129 if [ -d $MODULES_DIR/$mod ]; then
slaxemulator@533 130 rm -Rf $MODULES_DIR/$mod
slaxemulator@533 131 fi
slaxemulator@533 132
slaxemulator@533 133 if [ ! -d $MODULES_DIR/$mod ]; then
slaxemulator@533 134 mkdir -p $MODULES_DIR/$mod
slaxemulator@533 135 fi
slaxemulator@533 136 info "Adding $MODULES_DIR/$mod as top branch of union."
slaxemulator@533 137 mount -t aufs -o remount,add:0:${MODULES_DIR}/${mod}=rw aufs $UNION
slaxemulator@533 138 info "Adding $LASTBR as lower branch of union."
slaxemulator@533 139 mount -t aufs -o remount,mod:${LASTBR}=rr+wh aufs $UNION
slaxemulator@533 140 LASTBR="$MODULES_DIR/${mod}"
slaxemulator@533 141
slaxemulator@533 142 slitaz_union
slaxemulator@533 143 done
slaxemulator@533 144
slaxemulator@533 145 if [ -d ${UNION}/${INSTALLED} ]; then
slaxemulator@533 146 ls ${UNION}/${INSTALLED} | sort > $ROOTCD/packages-installed.list
slaxemulator@533 147 fi
slaxemulator@533 148
slaxemulator@533 149 info "Unmounting union"
slaxemulator@533 150 umount -l "${UNION}"
slaxemulator@533 151
slaxemulator@533 152 info "Removing unionfs .wh. files."
slaxemulator@533 153 find ${MODULES_DIR} -type f -name ".wh.*" -exec rm {} \;
slaxemulator@533 154 find ${MODULES_DIR} -type d -name ".wh.*" -exec rm -rf {} \;
slaxemulator@533 155 }
slaxemulator@539 156
slaxemulator@539 157 # _mksquash dirname
slaxemulator@539 158 _mksquash () {
slaxemulator@539 159 if [ ! -d "$1" ]; then
slaxemulator@539 160 error "Error: '$1' is not a directory"
slaxemulator@539 161 return 1
slaxemulator@539 162 fi
slaxemulator@539 163
slaxemulator@539 164 if [ ! -d "$2" ]; then
slaxemulator@539 165 error "Error: '$2' is not a directory"
slaxemulator@539 166 return 1
slaxemulator@539 167 fi
slaxemulator@539 168
slaxemulator@539 169 if [ ! -d "${1}${3}" ]; then
slaxemulator@539 170 error "Error: '${1}${3}' is not a directory"
slaxemulator@539 171 return 1
slaxemulator@539 172 fi
slaxemulator@539 173
slaxemulator@539 174 time_dir="${3}"
slaxemulator@539 175 sqimg="${2}/$(basename ${1}).${EXT}"
slaxemulator@539 176 info "====> Generating SquashFS image for '${1}'"
slaxemulator@539 177 if [ -e "${sqimg}" ]; then
slaxemulator@539 178 dirhaschanged=$(find ${1}${time_dir} -newer ${sqimg})
slaxemulator@539 179 if [ "${dirhaschanged}" != "" ]; then
slaxemulator@539 180 info "SquashFS image '${sqimg}' is not up to date, rebuilding..."
slaxemulator@539 181 rm "${sqimg}"
slaxemulator@539 182 else
slaxemulator@539 183 info "SquashFS image '${sqimg}' is up to date, skipping."
slaxemulator@539 184 return
slaxemulator@539 185 fi
slaxemulator@539 186 fi
slaxemulator@539 187
slaxemulator@539 188 info "Creating SquashFS image. This may take some time..."
slaxemulator@539 189 start=$(date +%s)
slaxemulator@539 190 if [ "${QUIET}" = "y" ]; then
slaxemulator@539 191 mksquashfs "${1}" "${sqimg}" ${NCPU} -noappend ${MKOPTION} -comp ${COMPRESSION} >/dev/null
slaxemulator@539 192 else
slaxemulator@539 193 mksquashfs "${1}" "${sqimg}" ${NCPU} -noappend ${MKOPTION} -comp ${COMPRESSION}
slaxemulator@539 194 fi
slaxemulator@539 195 minutes=$(echo $start $(date +%s) | awk '{ printf "%0.2f",($2-$1)/60 }')
slaxemulator@539 196 info "Image creation done in $minutes minutes."
slaxemulator@539 197 }