[Pkg-alsa-devel] Bug#106244: #106244
Thomas Hood
Thomas Hood <jdthood@yahoo.co.uk>, 106244@bugs.debian.org
Sat, 28 Feb 2004 11:04:27 +0100
On Fri, 2004-02-27 at 20:15, David B Harris wrote:
> I'm familiar with the policy, but I'll admit to having a hard time
> reading that section.
It _is_ complicated.
> The problem I see with doing it in the preinst is as follows:
>
> 1. alsa-utils preinst runs, moves asound.state to /var
> 2. alsa-driver old postrm runs /etc/init.d/alsa stop, state gets stored
> to /etc (the old alsactl is still on-disk)
> 3. alsa-utils finishes unpacking
> 4. alsa-driver new postinst runs /etc/init.d/alsa start, mixer settings
> are restored from /var
This will not happen because the sequence would be
1. alsa-utils new-preinst upgrade oldver -- moves asound.state to /var
2. alsa-utils and alsa-base are unpacked
3. alsa-base old-postrm upgrade newver -- possibly does "alsactl store"
alsa-utils old-postrm upgrade newver
4. alsa-base new-postinst configure oldver -- possibly "alsactl restore"
alsa-utils new-postinst configure oldver
I assume here that alsa-base and alsa-utils are upgrade simultaneously.
> In this situation, we see two side-effects; there is now
> /etc/asound.state and /var/lib/alsa/asound.state (the first one being
> the last set of saved mixer settings), and the mixer settings have been
> restored from /var/lib/alsa/asound.state, so they're potentially
> out-of-date (perhaps muted).
I agree that this would be bad and we should make sure that this
does not happen.
> Like I said though, I do have a hard time reading and understanding that
> section. I should probably go through dpkg source at some point, but I
> don't have the time for it now. Is the above scenario possible?
I don't think it is possible.
On reading through alsa-base.postinst I noted down the following
problems with the code.
* Indentation is irregular -- sometimes tabs, sometimes spaces
are used.
* Communicates with the user using 'echo' is deprecated.
See policy 3.10.1.
* This code
for i in $cards
is misleading because i is traditionally used to hold integers.
I suggest:
for card in $cards
* I see no need to create more than one tempfile in the configure
routine and I see no need for it to have more than one name.
Instead of this:
tempfile="$(tempfile)"
echo stuff > "$tempfile"
debconfbit="$(tempfile)"
echo otherstuff > "$debconfbit"
filetodumpto="$(tempfile)"
cat "$debconfbit" /usr/share/alsa-base/modules-snippet.conf \
"$tempfile" > "$filetodumpto"
if condition ; then cp $filetodumpto /etc/alsa/modutils/1.0 ; fi
rm -f "$tempfile" "$debconfbit" "$filetodumpto"
you could just do this:
filetodumpto="$(tempfile)"
echo otherstuff > "$filetodumpto"
cat /usr/share/alsa-base/modules-snippet.conf >> "$filetodumpto"
echo stuff >> "$filetodumpto"
if condition ; then mv "$filetodumpto" /etc/alsa/modutils/1.0 ;
else rm -f "$filetodumpto" ; fi
* The comment about force_stop_modules_before_suspend in
/etc/default/alsa is incorrect. It says
# Set as true if you want to unload alsa modules before
# your system suspends.
whereas the choices are actually between 'forcibly-unload-driver',
'stop-procs' and 'none'.
* This test always fails:
if [ -f /etc/alsa/modutils/1.0 -a ! -f /etc/alsa/modutils/1.0 ]
so there is probably an error here.
* The comment:
# Stolen from ripped out code to stop this fuckage once and for all.
# Reason that debhelper is above: we want the driver running when
# we try this.
isn't very clear. Furthermore it suggests that preceding debhelper
code "runs" the driver, presumably meaning that it loads the driver.
But the only preceding debhelper-installed code is the update-rc.d
line installed by dh_installinit and this will not load any drivers.
--
Thomas