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 } |