/bin/live-partial-squashfs-updates is in live-tools 4.0.2-1.1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 | #!/bin/sh
## live-partial-squashfs-updates - Generate partial squashfs updates.
## Copyright (C) 2013 Richard Nelson <unixabg@gmail.com>
##
## This program comes with ABSOLUTELY NO WARRANTY; for details see COPYING.
## This is free software, and you are welcome to redistribute it
## under certain conditions; see COPYING for details.
set -e
#set -x
Cleanup_mounts () {
echo "Unmounting the areas we created."
for mount_point in "${_MOUNTLIST}"; do
umount -l $mount_point
rmdir $mount_point
done
}
_MOUNTDIR=""
_MOUNTLIST="./filesystem_squashfs ./partial_squashfs_union ./partial_squashfs_updates"
_ROSTACK=":./filesystem_squashfs=ro"
for squash_file in $(ls ./psu-*.squashfs); do
# Setup mount for the squashfs images.
# Note that we stack here on the listing provided by ls command.
_MOUNTDIR="$(basename $squash_file .squashfs)_squashfs"
echo "Found $squash_file and setting up mount point of ${_MOUNTDIR}"
if [ ! -d "${_MOUNTDIR}" ]; then
mkdir "${_MOUNTDIR}"
fi
mount -o loop "./$squash_file" "./${_MOUNTDIR}"
_ROSTACK=":./${_MOUNTDIR}=rr+wh${_ROSTACK}"
_MOUNTLIST="${_MOUNTLIST} ./${_MOUNTDIR}"
done
echo "${_ROSTACK}"
echo "${_MOUNTLIST}"
# Setup mount for the filesystem.squashfs mount.
if [ ! -d "filesystem_squashfs" ]; then
mkdir filesystem_squashfs
fi
mount -o loop ./filesystem.squashfs ./filesystem_squashfs
# Setup mount for the updates which we will squash later.
if [ ! -d "partial_squashfs_updates" ]; then
mkdir partial_squashfs_updates
fi
mount -t tmpfs tmpfs ./partial_squashfs_updates
# Setup mount for the union where we stack ro squashfs and rw updates mount.
if [ ! -d "partial_squashfs_union" ]; then
mkdir partial_squashfs_union
fi
_DEFAULTRUNTYPE="C"
echo "#############################################################"
echo " (C)hroot - Chroot in to the filesystem.squashfs + psu-*.squashfs stack."
echo " (J)oin - Join the partial squashfs update files to new single psu-DATE.squashfs"
echo " (N)ew - New master filesystem.squashfs file which joins all *.squashfs file to new single filesystem.squashfs"
echo "Select run type (default is ${_DEFAULTRUNTYPE}):"
read _RUNTYPE
_RUNTYPE="${_RUNTYPE:-${_DEFAULTRUNTYPE}}"
if [ ${_RUNTYPE} = "C" ]
then
#mount -t aufs -o br=./partial_squashfs_updates=rw:./filesystem_squashfs=ro none ./partial_squashfs_union
mount -t aufs -o br=./partial_squashfs_updates=rw"${_ROSTACK}" none ./partial_squashfs_union
echo "You selected to run a chroot"
echo "Setup the chroot to union mount."
echo "Mounting bindings for dev, proc, sys, pts in union."
mount --bind /dev ./partial_squashfs_union/dev
mount --bind /proc ./partial_squashfs_union/proc
mount --bind /sys ./partial_squashfs_union/sys
mount --bind /dev/pts ./partial_squashfs_union/dev/pts
echo "Backup the union/etc/hosts."
mv ./partial_squashfs_union/etc/hosts ./hosts.bak
echo "Copying /etc/hosts to union/etc/hosts."
cp /etc/hosts ./partial_squashfs_union/etc/hosts
echo "Backup the union/etc/resolv.conf."
mv ./partial_squashfs_union/etc/resolv.conf ./resolv.conf.bak
echo "Copying /etc/resolv.conf to the union/etc/resolv.conf."
cp /etc/resolv.conf ./partial_squashfs_union/etc/resolv.conf
echo "Starting chroot in the union directory."
chroot ./partial_squashfs_union /bin/bash
echo "Exited the chroot so time to clean up."
umount -l ./partial_squashfs_union/dev
umount -l ./partial_squashfs_union/proc
umount -l ./partial_squashfs_union/sys
echo "Restore original union/etc/hosts."
mv ./hosts.bak ./partial_squashfs_union/etc/hosts
echo "Restore union/etc/resolv.conf."
mv ./resolv.conf.bak ./partial_squashfs_union/etc/resolv.conf
echo "Remove union/root/.bash_history."
rm ./partial_squashfs_union/root/.bash_history
# Prompt to save changes or not.
_DEFAULTYESNO="N"
echo "#############################################################"
echo " (Y)es save my chroot modifications."
echo " (N)o do not save my chroot modifications."
echo "Select to save your chroot modifications (default is ${_DEFAULTYESNO}):
"
read _YESNO
_YESNO="${_YESNO:-${_DEFAULTYESNO}}"
if [ ${_YESNO} = "Y" ]
then
_DATE=$(date +%Y%m%d-%H%M%S)
echo "Now making the updated squashfs ${_DATE}."
mksquashfs ./partial_squashfs_updates psu-${_DATE}.squashfs
# Since we use sed to put text at the top of the file make sure the file exists.
if [ ! -e psu-changelog.txt ]
then
echo "Created changelog." >> psu-changelog.txt
fi
# Add entry to changelog for the psu file.
echo "Please provide a small changelog entry for the psu-${_DATE}.squashfs :"
read _NOTES
sed -i "1s/^/${_DATE} - ${_NOTES}.\n/" psu-changelog.txt
else
echo "No chroot modifications saved to a psu file."
fi
Cleanup_mounts
elif [ ${_RUNTYPE} = "J" ] || [ ${_RUNTYPE} = "N" ]
then
if [ ${_RUNTYPE} = "J" ]
then
# Modify the _ROSTACK to not include the filesystem_squashfs mount so we just stack the updates together
_ROSTACK=$(echo ${_ROSTACK} | sed s@:./filesystem_squashfs=ro@@g)
_ACTIONTYPE="join psu squashfs files to new single psu-DATE.squashfs"
else
_ACTIONTYPE="create a new single filesystem.squashfs"
fi
echo "${_ROSTACK}"
#mount -t aufs -o br=./partial_squashfs_updates=rw:./filesystem_squashfs=ro none ./partial_squashfs_union
mount -t aufs -o br=./partial_squashfs_updates=rw"${_ROSTACK}" none ./partial_squashfs_union
# Prompt to join squashfs files or not.
_DEFAULTYESNO="N"
echo "#############################################################"
echo " (Y)es, ${_ACTIONTYPE}."
echo " (N)o, do not ${_ACTIONTYPE}."
echo "Select to ${_ACTIONTYPE} (default is ${_DEFAULTYESNO}):
"
read _YESNO
_YESNO="${_YESNO:-${_DEFAULTYESNO}}"
if [ ${_YESNO} = "Y" ]
then
# Since we use sed to put text at the top of the file make sure the file exists.
if [ ! -e psu-changelog.txt ]
then
echo "Created changelog." >> psu-changelog.txt
fi
_DATE=$(date +%Y%m%d-%H%M%S)
if [ ${_RUNTYPE} = "N" ]
then
if [ ! -d "new_squashfs" ]; then
mkdir new_squashfs
fi
echo "Now making a new and updated filesystem.squashfs."
mksquashfs ./partial_squashfs_union ./new_squashfs/filesystem.squashfs
# Add entry to changelog for the joining of the *.squashfs files to a new filesystem.squashfs.
sed -i "1s/^/******* ${_DATE} - New filesystem.squashfs generated. ********\n/" psu-changelog.txt
else
echo "Now making the updated squashfs ${_DATE} from union."
mksquashfs ./partial_squashfs_union psu-${_DATE}.squashfs
# Add entry to changelog for the joining of the psu files.
sed -i "1s/^/******* ${_DATE} - Joined squashfs files. ********\n/" psu-changelog.txt
fi
else
echo "No psu files will be joined."
fi
Cleanup_mounts
# Remove old directories and move old partials out.
if [ ${_YESNO} = "Y" ]
then
if [ ! -d "partial_squashfs_updates-OLD-${_DATE}" ]; then
mkdir psu-OOS-${_DATE}
fi
if [ ${_RUNTYPE} = "N" ]
then
rsync -av --remove-source-files ./psu-*.squashfs ./psu-OOS-${_DATE}/
rsync -av --remove-source-files ./filesystem.squashfs ./psu-OOS-${_DATE}/
rsync -av --remove-source-files ./new_squashfs/filesystem.squashfs ./
rmdir ./new_squashfs
else
rsync -av --remove-source-files --exclude psu-${_DATE}.squashfs ./psu-*.squashfs ./psu-OOS-${_DATE}/
fi
else
echo "No rsync of current partials to an Out Of Service folder will occur."
fi
else
echo "You entered an unknowon choice!"
echo "Aborting."
Cleanup_mounts
exit 1
fi
echo "All done goodbye!"
exit 0
|