Re: Linux image packages going to depend on python
On Sun, 2009-11-29 at 20:56 +0100, Frank Lin PIAT wrote:
> On Sun, 2009-11-29 at 13:56 +0100, Marco d'Itri wrote:
> > On Nov 28, Bastian Blank <waldi@debian.org> wrote:
> >
> > > The Linux image packages needs to do some modifications to core
> > > configuration files like fstab in the future to allow newer kernels to
> > > work. To do this and the planned further extension I intend to make all
> > > linux image packages depend on python.
FYI
As I were investigating an issue about volumes UUID, I noticed that
Ubuntu already had such transition, with this tool: volumeid[1]
It needed a minor update to use blkid instead of vol_id.
Franklin
[1] https://launchpad.net/ubuntu/gutsy/i386/volumeid/113-0ubuntu17.2
https://launchpad.net/ubuntu/+source/udev/113-0ubuntu17.2
#!/bin/sh -e
# Rewrite /etc/fstab so that filesystems are mounted by UUID
if [ -e /etc/fstab.pre-uuid ]; then
echo "/etc/fstab.pre-uuid already exists" 1>&2
echo "remove this file before running the script again" 1>&2
exit 1
fi
cp -a /etc/fstab /etc/fstab.pre-uuid
exec 9<&0 8>&1 </etc/fstab >/etc/fstab.new
trap "rm -f /etc/fstab.new" 0
uuids=""
old_IFS="$IFS"
IFS="
"
while read LINE
do
IFS="$old_IFS"
set -- $LINE
IFS="
"
DEV=$1 MTPT=$2 FSTYPE=$3 OPTS=$4
# Check the device is sane for conversion
case "$DEV" in
""|\#*) # Preserve blank lines and user comments
echo "$LINE"
continue
;;
LABEL=*|UUID=*) # Already mounting by LABEL or UUID
echo "$LINE"
continue
;;
/dev/mapper/*_crypt)# DM-Crypt devices
echo "$LINE"
continue
;;
/dev/disk/*) # Already mounting by particulars
echo "$LINE"
continue
;;
/dev/fd[0-9]*) # Floppy devices, not mounted by filesystem
echo "$LINE"
continue
;;
/dev/*) # Ordinary devices -- we want to convert
if [ ! -b "$DEV" ]; then
echo "$LINE"
continue
fi
;;
*) # Anything else gets left alone
echo "$LINE"
continue
;;
esac
# Don't convert filesystem types that don't make sense
case "$FSTYPE" in
auto) # Auto detection -- implies non-fixed fs
echo "$LINE"
continue
;;
esac
# Check filesystem options also
case "$OPTS" in
noauto|*,noauto|noauto,*|*,noauto,*) # Implies non-fixed
echo "$LINE"
continue
;;
esac
# If we reach this point, we think we want to move the fstab
# entry over to mount-by-UUID. The first check is that the
# filesystem on the device *has* a uuid
UUID=$(/sbin/vol_id -u "$DEV" || true)
if [ -z "$UUID" ]; then
# Can we generate one?
if [ "$FSTYPE" = "swap" ]; then
REAL_FSTYPE=$(/sbin/vol_id -t "$DEV" || true)
case "$REAL_FSTYPE" in
swap) # is a swap device, add a UUID to it
UUID=$(uuidgen)
echo -n "$UUID" |
perl -ne 's/-//g;chomp;print pack "H*",$_' |
dd conv=notrunc "of=$DEV" obs=1 seek=1036 2>/dev/null
;;
swsusp) # contains a suspended image, mkswap it!
if ! mkswap "$DEV" >/dev/null; then
echo "Warning: unable to make swap $DEV" 1>&2
echo "$LINE"
continue
fi
UUID=$(/sbin/vol_id -u "$DEV" || true)
if [ -z "$UUID" ]; then
echo "Warning: unable to generate uuid for $DEV" 1>&2
echo "$LINE"
continue
fi
;;
*)
echo "Warning: $DEV is not a swap partition" 1>&2
echo "$LINE"
continue
;;
esac
else
echo "Warning: unable to find a UUID for $DEV" 1>&2
echo "$LINE"
continue
fi
fi
# Check for duplicates
case "$uuids" in
"$UUID" | "$UUID "* | *" $UUID" | *" $UUID "*)
echo "Error: duplicate UUID $UUID detected" 1>&2
echo "Unable to migrate /etc/fstab to UUID-based mounting" 1>&2
exec 0<&9 9<&- 1>&8 8>&-
trap 0
rm -f /etc/fstab.new
exit 1
;;
*)
uuids="${uuids:+$uuids }$UUID"
;;
esac
# Now write the new line out
shift
echo "# $DEV -- converted during upgrade to edgy"
echo "UUID=$UUID $@"
done
IFS="$old_IFS"
exec 0<&9 9<&- 1>&8 8>&-
trap 0
#mv -f /etc/fstab.new /etc/fstab
exit 0
#!/bin/sh -e
# Rewrite /etc/fstab so that filesystems are mounted by UUID
if [ -e /etc/fstab.pre-uuid ]; then
echo "/etc/fstab.pre-uuid already exists" 1>&2
echo "remove this file before running the script again" 1>&2
exit 1
fi
cp -a /etc/fstab /etc/fstab.pre-uuid
exec 9<&0 8>&1 </etc/fstab >/etc/fstab.new
trap "rm -f /etc/fstab.new" 0
uuids=""
old_IFS="$IFS"
IFS="
"
while read LINE
do
IFS="$old_IFS"
set -- $LINE
IFS="
"
DEV=$1 MTPT=$2 FSTYPE=$3 OPTS=$4
# Check the device is sane for conversion
case "$DEV" in
""|\#*) # Preserve blank lines and user comments
echo "$LINE"
continue
;;
LABEL=*|UUID=*) # Already mounting by LABEL or UUID
echo "$LINE"
continue
;;
/dev/mapper/*_crypt)# DM-Crypt devices
echo "$LINE"
continue
;;
/dev/disk/*) # Already mounting by particulars
echo "$LINE"
continue
;;
/dev/fd[0-9]*) # Floppy devices, not mounted by filesystem
echo "$LINE"
continue
;;
/dev/*) # Ordinary devices -- we want to convert
if [ ! -b "$DEV" ]; then
echo "$LINE"
continue
fi
;;
*) # Anything else gets left alone
echo "$LINE"
continue
;;
esac
# Don't convert filesystem types that don't make sense
case "$FSTYPE" in
auto) # Auto detection -- implies non-fixed fs
echo "$LINE"
continue
;;
esac
# Check filesystem options also
case "$OPTS" in
noauto|*,noauto|noauto,*|*,noauto,*) # Implies non-fixed
echo "$LINE"
continue
;;
esac
# If we reach this point, we think we want to move the fstab
# entry over to mount-by-UUID. The first check is that the
# filesystem on the device *has* a uuid
UUID=$(/sbin/blkid -o value -s UUID "$DEV" || true)
if [ -z "$UUID" ]; then
# Can we generate one?
if [ "$FSTYPE" = "swap" ]; then
REAL_FSTYPE=$(/sbin/blkid -o value -s TYPE "$DEV" || true)
case "$REAL_FSTYPE" in
swap) # is a swap device, add a UUID to it
UUID=$(uuidgen)
echo -n "$UUID" |
perl -ne 's/-//g;chomp;print pack "H*",$_' |
dd conv=notrunc "of=$DEV" obs=1 seek=1036 2>/dev/null
;;
swsusp) # contains a suspended image, mkswap it!
if ! mkswap "$DEV" >/dev/null; then
echo "Warning: unable to make swap $DEV" 1>&2
echo "$LINE"
continue
fi
UUID=$(/sbin/blkid -o value -s UUID "$DEV" || true)
if [ -z "$UUID" ]; then
echo "Warning: unable to generate uuid for $DEV" 1>&2
echo "$LINE"
continue
fi
;;
*)
echo "Warning: $DEV is not a swap partition" 1>&2
echo "$LINE"
continue
;;
esac
else
echo "Warning: unable to find a UUID for $DEV" 1>&2
echo "$LINE"
continue
fi
fi
# Check for duplicates
case "$uuids" in
"$UUID" | "$UUID "* | *" $UUID" | *" $UUID "*)
echo "Error: duplicate UUID $UUID detected" 1>&2
echo "Unable to migrate /etc/fstab to UUID-based mounting" 1>&2
exec 0<&9 9<&- 1>&8 8>&-
trap 0
rm -f /etc/fstab.new
exit 1
;;
*)
uuids="${uuids:+$uuids }$UUID"
;;
esac
# Now write the new line out
shift
echo "# $DEV -- converted during upgrade to edgy"
echo "UUID=$UUID $@"
done
IFS="$old_IFS"
exec 0<&9 9<&- 1>&8 8>&-
trap 0
#mv -f /etc/fstab.new /etc/fstab
exit 0
Reply to: