2007-11-14 07:55:50 -01:00
|
|
|
#!/bin/sh
|
|
|
|
|
2010-09-02 11:12:37 +00:00
|
|
|
## live-build(7) - System Build Scripts
|
2020-03-11 09:07:21 -01:00
|
|
|
## Copyright (C) 2016-2020 The Debian Live team
|
2015-01-04 18:05:39 -01:00
|
|
|
## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch>
|
2010-09-02 11:12:37 +00:00
|
|
|
##
|
2012-07-29 23:59:00 +00:00
|
|
|
## This program comes with ABSOLUTELY NO WARRANTY; for details see COPYING.
|
2010-09-02 11:12:37 +00:00
|
|
|
## This is free software, and you are welcome to redistribute it
|
|
|
|
## under certain conditions; see COPYING for details.
|
|
|
|
|
2011-07-21 15:00:54 +00:00
|
|
|
Lodetach ()
|
|
|
|
{
|
|
|
|
DEVICE="${1}"
|
|
|
|
ATTEMPT="${2:-1}"
|
|
|
|
|
|
|
|
if [ "${ATTEMPT}" -gt 3 ]
|
|
|
|
then
|
|
|
|
Echo_error "Failed to detach loop device '${DEVICE}'."
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Changes to block devices result in uevents which trigger rules which in
|
|
|
|
# turn access the loop device (ex. udisks-part-id, blkid) which can cause
|
|
|
|
# a race condition. We call 'udevadm settle' to help avoid this.
|
2020-03-12 11:32:06 -01:00
|
|
|
if [ $(which udevadm) ]
|
2011-08-27 18:50:19 +00:00
|
|
|
then
|
2013-02-18 09:29:04 -01:00
|
|
|
udevadm settle
|
2011-08-27 18:50:19 +00:00
|
|
|
fi
|
2011-07-21 15:00:54 +00:00
|
|
|
|
|
|
|
# Loop back devices aren't the most reliable when it comes to writes.
|
|
|
|
# We sleep and sync for good measure - better than build failure.
|
|
|
|
sync
|
|
|
|
sleep 1
|
|
|
|
|
remove obsolete loop-aes-utils related losetup hack
677415f6d7efc1e5b888570d70af311d2900c69c (2007) in v1.0~a2-1 added a hack
relating to the loop-aes-utils package and losetup. this commit bundled
a bunch of changes, it was not specific to the hack, and so info about the
hack is limited to a brief comment included within the related change in
defaults:
```
# Workaround for loop-aes-utils divertion
# (loop-aes-utils' losetup lacks features).
```
though it is very similar to the removed fdisk hack in that it seems that
one package may replace a binary from another, moving the original to a
new location, and this hack gives the user the opportunity to select the
original instead of the one put in its place, for use in LB.
the comment mentions a package called loop-aes-utils as being the package
that performs such a diversion, and that the need for the hack was that
losetup itself lacked features, presumably encryption support, and it is
clear that it is the losetup binary that is the focus of the diversion.
looking into the history of loop-aes-utils a little, this package was
dropped from debian back in 2012 (#680748), favouring encrytion support of
dm-crypt/cryptsetup.
double checking file contents of packages, only the mount package carries
an /sbin/losetup file, so presumably this means that dm-setup/cryptsetup
do not perform such a diversion of losetup (i.e. their use is exclusively
done directly).
since the possible diversion is simply gone, that completely removes any
point in having the hack of giving users choice between losetup and the
diverted one. so let's remove this obsolete hack...
2020-03-11 17:43:12 -01:00
|
|
|
losetup -d "${DEVICE}" || Lodetach "${DEVICE}" "$(expr ${ATTEMPT} + 1)"
|
2011-07-21 15:00:54 +00:00
|
|
|
}
|
2007-11-14 07:55:50 -01:00
|
|
|
|
|
|
|
Losetup ()
|
|
|
|
{
|
|
|
|
DEVICE="${1}"
|
|
|
|
FILE="${2}"
|
2009-07-08 16:04:38 +00:00
|
|
|
PARTITION="${3:-1}"
|
2007-11-14 07:55:50 -01:00
|
|
|
|
remove obsolete loop-aes-utils related losetup hack
677415f6d7efc1e5b888570d70af311d2900c69c (2007) in v1.0~a2-1 added a hack
relating to the loop-aes-utils package and losetup. this commit bundled
a bunch of changes, it was not specific to the hack, and so info about the
hack is limited to a brief comment included within the related change in
defaults:
```
# Workaround for loop-aes-utils divertion
# (loop-aes-utils' losetup lacks features).
```
though it is very similar to the removed fdisk hack in that it seems that
one package may replace a binary from another, moving the original to a
new location, and this hack gives the user the opportunity to select the
original instead of the one put in its place, for use in LB.
the comment mentions a package called loop-aes-utils as being the package
that performs such a diversion, and that the need for the hack was that
losetup itself lacked features, presumably encryption support, and it is
clear that it is the losetup binary that is the focus of the diversion.
looking into the history of loop-aes-utils a little, this package was
dropped from debian back in 2012 (#680748), favouring encrytion support of
dm-crypt/cryptsetup.
double checking file contents of packages, only the mount package carries
an /sbin/losetup file, so presumably this means that dm-setup/cryptsetup
do not perform such a diversion of losetup (i.e. their use is exclusively
done directly).
since the possible diversion is simply gone, that completely removes any
point in having the hack of giving users choice between losetup and the
diverted one. so let's remove this obsolete hack...
2020-03-11 17:43:12 -01:00
|
|
|
losetup --read-only --partscan "${DEVICE}" "${FILE}"
|
2020-03-11 16:56:03 -01:00
|
|
|
FDISK_OUT="$(fdisk -l -u ${DEVICE} 2>&1)"
|
2011-07-21 15:00:54 +00:00
|
|
|
Lodetach "${DEVICE}"
|
2007-11-14 07:55:50 -01:00
|
|
|
|
|
|
|
LOOPDEVICE="$(echo ${DEVICE}p${PARTITION})"
|
|
|
|
|
|
|
|
if [ "${PARTITION}" = "0" ]
|
|
|
|
then
|
2008-08-11 20:28:54 +00:00
|
|
|
Echo_message "Mounting %s with offset 0" "${DEVICE}"
|
2007-11-14 07:55:50 -01:00
|
|
|
|
remove obsolete loop-aes-utils related losetup hack
677415f6d7efc1e5b888570d70af311d2900c69c (2007) in v1.0~a2-1 added a hack
relating to the loop-aes-utils package and losetup. this commit bundled
a bunch of changes, it was not specific to the hack, and so info about the
hack is limited to a brief comment included within the related change in
defaults:
```
# Workaround for loop-aes-utils divertion
# (loop-aes-utils' losetup lacks features).
```
though it is very similar to the removed fdisk hack in that it seems that
one package may replace a binary from another, moving the original to a
new location, and this hack gives the user the opportunity to select the
original instead of the one put in its place, for use in LB.
the comment mentions a package called loop-aes-utils as being the package
that performs such a diversion, and that the need for the hack was that
losetup itself lacked features, presumably encryption support, and it is
clear that it is the losetup binary that is the focus of the diversion.
looking into the history of loop-aes-utils a little, this package was
dropped from debian back in 2012 (#680748), favouring encrytion support of
dm-crypt/cryptsetup.
double checking file contents of packages, only the mount package carries
an /sbin/losetup file, so presumably this means that dm-setup/cryptsetup
do not perform such a diversion of losetup (i.e. their use is exclusively
done directly).
since the possible diversion is simply gone, that completely removes any
point in having the hack of giving users choice between losetup and the
diverted one. so let's remove this obsolete hack...
2020-03-11 17:43:12 -01:00
|
|
|
losetup --partscan "${DEVICE}" "${FILE}"
|
2007-11-14 07:55:50 -01:00
|
|
|
else
|
2008-03-10 23:10:59 -01:00
|
|
|
SECTORS="$(echo "$FDISK_OUT" | sed -ne "s|^$LOOPDEVICE[ *]*\([0-9]*\).*|\1|p")"
|
|
|
|
OFFSET="$(expr ${SECTORS} '*' 512)"
|
2007-11-14 07:55:50 -01:00
|
|
|
|
2008-08-11 20:28:54 +00:00
|
|
|
Echo_message "Mounting %s with offset %s" "${DEVICE}" "${OFFSET}"
|
2007-11-14 07:55:50 -01:00
|
|
|
|
remove obsolete loop-aes-utils related losetup hack
677415f6d7efc1e5b888570d70af311d2900c69c (2007) in v1.0~a2-1 added a hack
relating to the loop-aes-utils package and losetup. this commit bundled
a bunch of changes, it was not specific to the hack, and so info about the
hack is limited to a brief comment included within the related change in
defaults:
```
# Workaround for loop-aes-utils divertion
# (loop-aes-utils' losetup lacks features).
```
though it is very similar to the removed fdisk hack in that it seems that
one package may replace a binary from another, moving the original to a
new location, and this hack gives the user the opportunity to select the
original instead of the one put in its place, for use in LB.
the comment mentions a package called loop-aes-utils as being the package
that performs such a diversion, and that the need for the hack was that
losetup itself lacked features, presumably encryption support, and it is
clear that it is the losetup binary that is the focus of the diversion.
looking into the history of loop-aes-utils a little, this package was
dropped from debian back in 2012 (#680748), favouring encrytion support of
dm-crypt/cryptsetup.
double checking file contents of packages, only the mount package carries
an /sbin/losetup file, so presumably this means that dm-setup/cryptsetup
do not perform such a diversion of losetup (i.e. their use is exclusively
done directly).
since the possible diversion is simply gone, that completely removes any
point in having the hack of giving users choice between losetup and the
diverted one. so let's remove this obsolete hack...
2020-03-11 17:43:12 -01:00
|
|
|
losetup --partscan -o "${OFFSET}" "${DEVICE}" "${FILE}"
|
2007-11-14 07:55:50 -01:00
|
|
|
fi
|
|
|
|
}
|
2008-09-07 14:39:29 +00:00
|
|
|
|
2016-04-16 20:18:22 +00:00
|
|
|
# adapted from lib/ext2fs/mkjournal.c, default block size is 4096 bytes (/etc/mke2fs.conf).
|
|
|
|
ext2fs_default_journal_size()
|
2008-09-07 14:39:29 +00:00
|
|
|
{
|
2016-04-16 20:18:22 +00:00
|
|
|
SIZE="$1"
|
|
|
|
if [ "${SIZE}" -lt "8" ]; then # 2048*4096
|
|
|
|
echo 0
|
|
|
|
elif [ "${SIZE}" -lt "128" ]; then # 32768*4096
|
|
|
|
echo 4
|
|
|
|
elif [ "${SIZE}" -lt "1024" ]; then # 256*1024*4096
|
|
|
|
echo 16
|
|
|
|
elif [ "${SIZE}" -lt "2048" ]; then # 512*1024*4096
|
|
|
|
echo 32
|
|
|
|
elif [ "${SIZE}" -lt "4096" ]; then # 1024*1024*4096
|
|
|
|
echo 64
|
|
|
|
else
|
|
|
|
echo 128
|
|
|
|
fi
|
|
|
|
}
|
2008-09-07 14:39:29 +00:00
|
|
|
|
2016-04-16 20:18:22 +00:00
|
|
|
Calculate_partition_size_without_journal ()
|
|
|
|
{
|
|
|
|
WITHOUT_JOURNAL_ORIGINAL_SIZE="${1}"
|
|
|
|
WITHOUT_JOURNAL_FILESYSTEM="${2}"
|
|
|
|
|
|
|
|
case "${WITHOUT_JOURNAL_FILESYSTEM}" in
|
2011-11-04 11:45:37 -01:00
|
|
|
ext2|ext3|ext4)
|
2013-02-21 07:04:28 -01:00
|
|
|
PERCENT="6"
|
2008-09-07 14:39:29 +00:00
|
|
|
;;
|
|
|
|
*)
|
2009-11-12 04:43:35 -01:00
|
|
|
PERCENT="3"
|
2008-09-07 14:39:29 +00:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2016-04-16 20:18:22 +00:00
|
|
|
echo $(expr ${WITHOUT_JOURNAL_ORIGINAL_SIZE} + ${WITHOUT_JOURNAL_ORIGINAL_SIZE} \* ${PERCENT} / 100 + 1)
|
|
|
|
}
|
|
|
|
|
|
|
|
Calculate_partition_size ()
|
|
|
|
{
|
|
|
|
ORIGINAL_SIZE="${1}"
|
|
|
|
FILESYSTEM="${2}"
|
|
|
|
|
|
|
|
case "${FILESYSTEM}" in
|
|
|
|
ext3|ext4)
|
|
|
|
NON_JOURNAL_SIZE=$(Calculate_partition_size_without_journal ${ORIGINAL_SIZE} ${FILESYSTEM})
|
|
|
|
PROJECTED_JOURNAL_SIZE=$(ext2fs_default_journal_size ${NON_JOURNAL_SIZE})
|
|
|
|
PROJECTED_PARTITION_SIZE=$(expr ${ORIGINAL_SIZE} + ${PROJECTED_JOURNAL_SIZE})
|
|
|
|
PRE_FINAL_PARTITION_SIZE=$(Calculate_partition_size_without_journal ${PROJECTED_PARTITION_SIZE} ${FILESYSTEM})
|
|
|
|
JOURNAL_SIZE=$(ext2fs_default_journal_size ${PRE_FINAL_PARTITION_SIZE})
|
|
|
|
|
|
|
|
expr $(Calculate_partition_size_without_journal ${ORIGINAL_SIZE} ${FILESYSTEM}) + ${JOURNAL_SIZE}
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
Calculate_partition_size_without_journal ${ORIGINAL_SIZE} ${FILESYSTEM}
|
|
|
|
;;
|
|
|
|
esac
|
2008-09-07 14:39:29 +00:00
|
|
|
}
|