This file is indexed.

/bin/live-partial-squashfs-updates is in live-tools 1:20151214+nmu1.

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
221
222
223
224
225
226
#!/bin/sh

# live-tools(7) - System Support Scripts
# Copyright (C) 2013-2015 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
	# The upperdir and work dir need to be cleaned up also.
	rm -rf ./psu_overlay_rw ./psu_overlay_work
}

_MOUNTDIR=""
_MOUNTLIST="./filesystem_squashfs ./psu_overlay"
_LSTACK="./filesystem_squashfs"
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}"
	# The lowerdir stacks the list from right to left, hence the filesystem.squashfs
	# is the last one in the list, so we pre-append names to the list.
	_LSTACK="./${_MOUNTDIR}:${_LSTACK}"
	_MOUNTLIST="./${_MOUNTDIR} ${_MOUNTLIST}"
done
echo "${_LSTACK}"
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 overlay upperdir which is rw which we will squash later.
if [ ! -d "psu_overlay_rw" ]; then
	mkdir psu_overlay_rw
fi
# Setup mount for the overlay work folder which appears to be required.
if [ ! -d "psu_overlay_work" ]; then
	mkdir psu_overlay_work
fi
# Setup mount for the overlay where we stack ro squashfs list.
if [ ! -d "psu_overlay" ]; then
	mkdir psu_overlay
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 overlay overlay -olowerdir=./psu-2_squashfs:./psu-1_squashfs:filesystem_squashfs,upperdir=./psu_overlay_rw,workdir=./psu_overlay_work ./psu_overlay
	mount -t overlay overlay -olowerdir="${_LSTACK}",upperdir=./psu_overlay_rw,workdir=./psu_overlay_work ./psu_overlay
	echo "You selected to run a chroot"
	echo "Setup the chroot to overlay mount."
	echo "Mounting bindings for dev, proc, sys, pts in overlay."
	mount --bind /dev ./psu_overlay/dev
	mount --bind /proc ./psu_overlay/proc
	mount --bind /sys ./psu_overlay/sys
	mount --bind /dev/pts ./psu_overlay/dev/pts

	echo "Backup the overlay/etc/hosts."
	mv ./psu_overlay/etc/hosts ./hosts.bak
	echo "Copying /etc/hosts to overlay/etc/hosts."
	cp /etc/hosts ./psu_overlay/etc/hosts

	echo "Backup the overlay/etc/resolv.conf."
	mv ./psu_overlay/etc/resolv.conf ./resolv.conf.bak
	echo "Copying /etc/resolv.conf to the overlay/etc/resolv.conf."
	cp /etc/resolv.conf ./psu_overlay/etc/resolv.conf

	echo "Starting chroot in the overlay directory."
	chroot ./psu_overlay /bin/bash

	echo "Exited the chroot so time to clean up."
	umount -l ./psu_overlay/dev
	umount -l ./psu_overlay/proc
	umount -l ./psu_overlay/sys

	echo "Restore original overlay/etc/hosts."
	mv ./hosts.bak ./psu_overlay/etc/hosts
	echo "Restore overlay/etc/resolv.conf."
	mv ./resolv.conf.bak ./psu_overlay/etc/resolv.conf
	echo "Remove overlay/root/.bash_history."
	rm ./psu_overlay/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 ./psu_overlay_rw 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 _LSTACK to not include the filesystem_squashfs mount so we just stack the updates together
		_LSTACK=$(echo ${_LSTACK} | sed s@:./filesystem_squashfs@@g)
		_ACTIONTYPE="join psu squashfs files to new single psu-DATE.squashfs"
	else
		_ACTIONTYPE="create a new single filesystem.squashfs"
	fi

	echo "${_LSTACK}"
	#mount -t overlay overlay -olowerdir=./psu-2_squashfs:./psu-1_squashfs,upperdir=./psu_overlay_rw,workdir=./psu_overlay_work ./psu_overlay
	mount -t overlay overlay -olowerdir="${_LSTACK}",upperdir=./psu_overlay_rw,workdir=./psu_overlay_work ./psu_overlay

	# 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 ./psu_overlay ./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 overlay."
			mksquashfs ./psu_overlay 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 "psu_overlay_rw-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