212,213b USB flash names not retained in Pmount, Univ Inst

Please post any bugs you have found
Message
Author
PaulBx1
Posts: 2312
Joined: Sat 17 Jun 2006, 03:11
Location: Wyoming, USA

#31 Post by PaulBx1 »

From my experiment earlier:

Code: Select all

sh-3.00# /root/probedisk
/dev/hdc|cdrom|MATSHITADVD-ROM SR-8175
/dev/hda|disk|IC25N020ATDA04-0
/dev/sda|Direct-Access|LEXAR    JD FIREFLY       
sh-3.00# /root/probepart
libcfdisk: unable to open /dev/sda
/dev/hdc|iso9660|0|MATSHITADVD-ROM SR-8175
/dev/hda1|vfat|36968337|Win95 FAT32 (LBA)
/dev/hda2|swap|2086560|Linux Swap 
Obviously probepart is looking for sda which is not there, however it may be thinking it's there by paying attention to probedisk! So maybe only probedisk needs fixing.

If you hadn't noticed my edit above, I found that MUT also uses /var/log/messages...

plinej
Posts: 1742
Joined: Mon 14 Aug 2006, 02:21

#32 Post by plinej »

Yeah, I think /var/log/messages is probably the easiest way to go. If I get bored I'll try and think up ways to get rid of probedisk alltogether but for now I think this script should solve the problem.

PaulBx1
Posts: 2312
Joined: Sat 17 Jun 2006, 03:11
Location: Wyoming, USA

#33 Post by PaulBx1 »

Well, I tried it on 211 and it looked like it worked, sort of (although when I pulled one out, pmount acted like both flash drives were gone). I tried in 213 and nothing worked, I think because of mrxvt. Then going back to 211 it is even more broken:

Code: Select all

sh-3.00# probedisk
/dev/hdc|cdrom|MATSHITADVD-ROM SR-8175
/dev/hda|disk|IC25N020ATDA04-0
/dev/sda|Direct-Access|LEXAR JD FIREFLY 
/dev/sdb|Direct-Access|LEXAR JD FIREFLY 
MUT knows sda is the IntelligentStick.

plinej
Posts: 1742
Joined: Mon 14 Aug 2006, 02:21

#34 Post by plinej »

Weird, here's mine with the revised probedisk:

Code: Select all

sh-3.00# probedisk
/dev/hda|disk|IC25N080ATMR04-0
/dev/hdc|cdrom|HL-DT-ST DVD-RW GWA-4040N
/dev/sda|Direct-Access|WD 1600JB External 
/dev/sdb|Direct-Access|JetFlash TS1GJF110 
/dev/sdc|Direct-Access|GENERIC USB Storage-CFC 
I'm in 2.11 right now. I have audio and usb issues with the new kernel. Are you using the newest version of pmount and not the original 2.11 pmount? After going back into 2.11 you moved the revised probedisk into /sbin/?

After a while of taking out and re-inserting the usb drives MUT, pmount, and probedisk all show the same and correct information.

PaulBx1
Posts: 2312
Joined: Sat 17 Jun 2006, 03:11
Location: Wyoming, USA

#35 Post by PaulBx1 »

Just using the 211 pmount. Now I recall it had problems <sigh> I will get the one in 213. However pmount should not affect the way probedisk works, right? That's still broken.

I followed your instructions for probedisk and probedisk2.

Did you try pulling and reinserting a flash drive? That's when mine went bad...

plinej
Posts: 1742
Joined: Mon 14 Aug 2006, 02:21

#36 Post by plinej »

Yeah, I pulled and re-inserted my usb drives and all the correct information was retained in probedisk.

User avatar
pakt
Posts: 1157
Joined: Sat 04 Jun 2005, 16:54
Location: Sweden

#37 Post by pakt »

Running 2.13b2 from my eBox right now (no pup_save file) and tried plinej's probedisk script. Seems to work okay. Here's an excerpt:

Code: Select all

sh-3.00# probedisk
/dev/hda|disk|CF-ATA
/dev/sda|Direct-Access|SanDisk Cruzer Mini 
/dev/sdb|Direct-Access|USB 2.0 Mobile Disk 
sh-3.00# 
sh-3.00# probedisk
/dev/hda|disk|CF-ATA
/dev/sdb|Direct-Access|USB 2.0 Mobile Disk 
sh-3.00# 
sh-3.00# probedisk
/dev/hda|disk|CF-ATA
/dev/sda|Direct-Access|SanDisk Cruzer Mini 
/dev/sdb|Direct-Access|USB 2.0 Mobile Disk 
sh-3.00#
Paul
Methinks Raspberry Pi were ideal for runnin' Puppy Linux

User avatar
pakt
Posts: 1157
Joined: Sat 04 Jun 2005, 16:54
Location: Sweden

#38 Post by pakt »

Ineresting to see what happens when using 'stock' 2.13b2 pmount with plinej's probedisk:

pmount reports correctly:
sda 'SanDisk' drive /dev/sda1
sdb 'USB 2.0' /dev/sdb1

Pulled 'SanDisk', now pmount doesn't report *any* USB drive.

Plugged 'SanDisk' back in, pmount reports both USB drives exactly as before.

Pulled 'USB 2.0', pmount correctly reports the SanDisk sda drive.

Seems like pmount stops looking for USB drives if it can't find sda.

Paul
Methinks Raspberry Pi were ideal for runnin' Puppy Linux

plinej
Posts: 1742
Joined: Mon 14 Aug 2006, 02:21

#39 Post by plinej »

pakt,

Does the newly updated pmount do that too? If not, does the modified probedisk report back correctly when pmount doesn't?

User avatar
pakt
Posts: 1157
Joined: Sat 04 Jun 2005, 16:54
Location: Sweden

#40 Post by pakt »

plinej wrote:Does the newly updated pmount do that too?
Unfortunately, it does - no difference.
plinej wrote:If not, does the modified probedisk report back correctly when pmount doesn't?
Yes, probedisk gives the right results:
sh-3.00# probedisk
/dev/hda|disk|CF-ATA
/dev/sda|Direct-Access|SanDisk Cruzer Mini
/dev/sdb|Direct-Access|USB 2.0 Mobile Disk
sh-3.00#
sh-3.00# probedisk
/dev/hda|disk|CF-ATA
/dev/sdb|Direct-Access|USB 2.0 Mobile Disk
sh-3.00#
sh-3.00# probedisk
/dev/hda|disk|CF-ATA
/dev/sda|Direct-Access|SanDisk Cruzer Mini
/dev/sdb|Direct-Access|USB 2.0 Mobile Disk
sh-3.00#
Methinks Raspberry Pi were ideal for runnin' Puppy Linux

plinej
Posts: 1742
Joined: Mon 14 Aug 2006, 02:21

#41 Post by plinej »

I'll have to look over pmount tomorrow if I get a chance. Time for NYE's festivities.

plinej
Posts: 1742
Joined: Mon 14 Aug 2006, 02:21

#42 Post by plinej »

In the meantime I added a little more to my modified probedisk script. Now it should find your usb drives, hard drives, & usb cdroms. I haven't added any code for floppy or zip yet. I have no floppy on my laptop but I could do some testing on another computer when I get a chance.

Code: Select all

#!/bin/sh

### a re-write for probedisk (usb portion)
### the original probedisk has problems with usb information
### http://www.murga-linux.com/puppy/viewtopic.php?t=13267

if [ -d /tmp/probedisk ]; then
rm -r /tmp/probedisk
fi
if [ -f /tmp/probedisk ]; then
rm -f /tmp/probedisk
fi
mkdir /tmp/probedisk
cp /var/log/messages /tmp/probedisk/
#probedisk2 | grep -v 'dev/sd' > /tmp/probedisk/probedisk  ### use the original probedisk (renamed to probedisk2) to get all non-usb information
if [ -d /proc/ide ]; then
cd /proc/ide
ls -d hd* | while read DRIVE
do
echo \/dev\/"$DRIVE"\|`cat "$DRIVE"/media`\|`cat "$DRIVE"/model | tr -s ' '` >> /tmp/probedisk/probedisk
done
fi

if [ "`cat /tmp/probedisk/messages | grep -i cd-*rom`" != "" ]; then
cat /tmp/probedisk/messages | grep -i cd-*rom -B 1 -A 1  | sed -e 's/.*kernel:/:/g' | grep 'Vendor:' -A 2 | sed '/^$/d' | sed '/^--/d' | grep -v 'Type:' > /tmp/probedisk/usbcdrom
if [ "`cat /tmp/probedisk/usbcdrom | grep ': sr'`" != "" ]; then
cat /tmp/probedisk/usbcdrom | grep ': sr' | sort -u > /tmp/probedisk/usbcdroms
a=`cat /tmp/probedisk/usbcdroms | wc -l | sed -e 's/ *//' | sed -e 's/ .*//g'`
while [ "$a" != 0 ]
do
DEV=`cat /tmp/probedisk/usbcdroms | sed -n ""$a"p" | cut -f 2 -d ':' | sed -e 's/ //g' | sed -e 's/sr/scd/g'`
if [ "`cat /tmp/probedisk/usbcdrom | grep 'Vendor:'`" != "" ]; then
b=`cat /tmp/probedisk/usbcdrom | wc -l | sed -e 's/ *//' | sed -e 's/ .*//g'`
c=`expr "$b" - "$a"`
d=1
while [ "$d" != 0 ]
do
VENDOR=`cat /tmp/probedisk/usbcdrom | sed -n ""$c"p" | cut -f 3 -d ':' | sed -e 's/Model//g' | tr -s ' ' | sed -e 's/^ //g'`
MODEL=`cat /tmp/probedisk/usbcdrom | sed -n ""$c"p" | cut -f 4 -d ':' | sed -e 's/Rev//g' | tr -s ' ' | sed -e 's/^ //g'`
if [ "$VENDOR" = "" ]; then
if [ "$MODEL" = "" ]; then
c=`expr "$c" - 1`
fi
fi
if [ "$MODEL" != "" ]; then
d=0
fi
echo \/dev\/"$DEV"\|cdrom\|"$VENDOR""$MODEL" >> /tmp/probedisk/probedisk 
done
fi
a=`expr "$a" - 1`
done
fi
fi

if [ "`cat /tmp/probedisk/messages | grep Direct-Access`" != "" ]; then
cat /proc/partitions | grep sd | sed -e 's/[0-9]//g' | sed -e 's/ //g' | sort -u > /tmp/probedisk/usbdevices  ### get current existing usb device names
cat /tmp/probedisk/usbdevices | while read DEV
do
cat /tmp/probedisk/messages | grep Direct-Access -A 1 -B 1  | sed -e 's/.*kernel:/:/g' | grep -v Direct-Access | sed '/^$/d' | sed '/^--/d' | grep "$DEV" -B 1 > /tmp/probedisk/"$DEV" ### get necessary info from /tmp/probedisk/messages
NUMLINES=`cat /tmp/probedisk/"$DEV" | wc -l | sed -e 's/ *//' | sed -e 's/ .*//g'`
NUMLINES2=`expr "$NUMLINES" - 1`
if [ "`cat /tmp/probedisk/"$DEV" | grep Vendor`" != "" ]; then  ### just incase Vendor info isn't on designated line
while [ "`cat /tmp/probedisk/"$DEV" | sed -n ""$NUMLINES2"p" | grep Vendor`" = "" ]
do
NUMLINES2=`expr "$NUMLINES2" - 1`
done
fi
if [ "`cat /tmp/probedisk/"$DEV" | grep Vendor`" = "" ]; then  ### just incase Vendor info isn't in file we'll try to get it an alternate way
NUM=`cat /tmp/probedisk/messages | grep 'SCSI device "$DEV":' -n | cut -f 1 -d ':' | tail -n 1`  ### get last line in /tmp/probedisk/messages that contains 'SCSI device (your device)'
NUM2=`expr "$NUM" - 1`
while [ "`cat /tmp/probedisk/messages | sed -n ""$NUM2"p" | grep Vendor`" = "" ]
do
NUM2=`expr "NUM2" - 1`
done
VENDOR=`cat /tmp/probedisk/messages | sed -n ""$NUM2"p" | sed -e 's/.*kernel:/:/g'`
else
VENDOR=`cat /tmp/probedisk/"$DEV" | sed -n ""$NUMLINES2"p" > /tmp/probedisk/"$DEV"-vendor`
fi
BRAND=`cat /tmp/probedisk/"$DEV"-vendor | cut -f 3 -d ':' | sed -e 's/Model//g' | sed -e 's/ *//' | tr -s ' '`
NAME=`cat /tmp/probedisk/"$DEV"-vendor | cut -f 4 -d ':' | sed -e 's/Rev//g' | sed -e 's/ *//' | tr -s ' '`
echo \/dev\/"$DEV"\|Direct-Access\|"$BRAND""$NAME" >> /tmp/probedisk/probedisk  ### reorganize to output how original probedisk outputs
done
fi

cat /tmp/probedisk/probedisk
rm -r /tmp/probedisk

plinej
Posts: 1742
Joined: Mon 14 Aug 2006, 02:21

#43 Post by plinej »

If anyone has a zip drive, let me know where all the pertinent information is stored (maybe in proc) so I can add that to the script. Post the info as it appears in the file(s). I'll need to know where the device information is stored (/dev/whatever) and the vendor/model information.

User avatar
BarryK
Puppy Master
Posts: 9392
Joined: Mon 09 May 2005, 09:23
Location: Perth, Western Australia
Contact:

#44 Post by BarryK »

Please do not use the libhardware 0.7.4 source, it has some bugs.
I discussed this with Antonio ages ago. I am using source dated 20060703, if I recall rightly, it some some mods by me.
...hmmm, I see my source isn't at puptrix.org/sources/.

Antonio did put fixes into his CVS code, but he has stopped working on
it and it has never progressed to a release version. He has however
packaged the CVS here (20060805):
http://www.badpenguin.org/pub/software/libhardware/

...so, perhaps that has some further improvements.

Ha, I have just found my source (and the required libbadpenguin):

User avatar
BarryK
Puppy Master
Posts: 9392
Joined: Mon 09 May 2005, 09:23
Location: Perth, Western Australia
Contact:

#45 Post by BarryK »

I have also uploaded those packages to puptrix.

User avatar
pakt
Posts: 1157
Joined: Sat 04 Jun 2005, 16:54
Location: Sweden

#46 Post by pakt »

pakt wrote:Ineresting to see what happens when using 'stock' 2.13b2 pmount with plinej's probedisk:

pmount reports correctly:
sda 'SanDisk' drive /dev/sda1
sdb 'USB 2.0' /dev/sdb1

Pulled 'SanDisk', now pmount doesn't report *any* USB drive.

Plugged 'SanDisk' back in, pmount reports both USB drives exactly as before.

Pulled 'USB 2.0', pmount correctly reports the SanDisk sda drive.

Seems like pmount stops looking for USB drives if it can't find sda.

Paul
Okay, I got another clue here. It's probepart that reports both USB drives gone when only sda is pulled out!

When I plug sda back in, probepart again reports both drives as present. :roll:
Methinks Raspberry Pi were ideal for runnin' Puppy Linux

plinej
Posts: 1742
Joined: Mon 14 Aug 2006, 02:21

#47 Post by plinej »

I see the problem when there is no /dev/sda but there is a /dev/sdb (or c, d, e, whatever). That problem lies in probepart. If it doesn't see sda it won't look further. I'll compile that latest cvs of libhardware and see if it works any better, otherwise we'll have to work on more wrapper scripts or something.

--edit--

posted before I saw pakt's comment.

plinej
Posts: 1742
Joined: Mon 14 Aug 2006, 02:21

#48 Post by plinej »

Nope, the cvs version is corrupt too. Both probedisk and probepart have the same problems as the normal puppy version. I'll see if I can think up a wrapper script for probepart too.

plinej
Posts: 1742
Joined: Mon 14 Aug 2006, 02:21

#49 Post by plinej »

I figured out a better way to make a wrapper script for probedisk using cdrecord -scanbus. I did alot of messing with it and it appears to list the drives in order so getting the brand/model information seems more reliable that way and not to mention made my script much smaller. I also just finished up a wrapper script for probepart. I made a dotpup package with dougal and my updates to pmount and my probedisk/probepart modifications. The package contains the three mentioned files and also the original probedisk and probepart renamed to probedisk2 and probepart2. Give it a try and let me know if it works.

--edit--

had to add a cross reference with /var/log/messages to verify correct device found from cdrecord -scanbus since they don't always print in order.

--edit--

removed this version and posted another furthur down
Last edited by plinej on Wed 03 Jan 2007, 02:48, edited 6 times in total.

plinej
Posts: 1742
Joined: Mon 14 Aug 2006, 02:21

#50 Post by plinej »

Here's my probedisk script:

Code: Select all

#!/bin/sh

### wrapper script to fix probedisk issues with usb drives

if [ -d /tmp/probedisk ]; then
rm -r /tmp/probedisk
fi
if [ -f /tmp/probedisk ]; then
rm -f /tmp/probedisk
fi

if [ "`cat /proc/partitions | grep sd`" != "" ]; then
mkdir /tmp/probedisk
cat /proc/partitions | grep sd | sed -e 's/[0-9]//g' | sed -e 's/ //g' | sort -u > /tmp/probedisk/usbdevices  ### get current existing usb device names
cdrecord -scanbus 2>/dev/null | grep Disk > /tmp/probedisk/scanbus
START=1
cat /tmp/probedisk/usbdevices | while read DEV
do
BRAND=`cat /tmp/probedisk/scanbus | sed -n ""$START"p" | cut -f 2 -d "'" | tr -s ' '`
MODEL=`cat /tmp/probedisk/scanbus | sed -n ""$START"p" | cut -f 4 -d "'" | tr -s ' '`
if [ "`cat /var/log/messages | grep "$MODEL"`" != "" ]; then
NUMLINES="`cat /var/log/messages | grep "$MODEL" -A 2 | grep -v Direct-Access | grep -v "$MODEL" | wc -l | sed -e 's/ *//' | sed -e 's/ .*//g'`"
DEV2="`cat /var/log/messages | grep "$MODEL" -A 2 | grep -v Direct-Access | grep -v "$MODEL" | cut -f 4 -d ':' | sed -e 's/SCSI//g' | sed -e 's/device//g' | sed -e 's/ //g' | sed -n ""$NUMLINES"p" | grep sd`"
if [ "$DEV2" != "" ]; then
DEV="$DEV2"
fi
fi
echo \/dev\/"$DEV"\|Direct-Access\|"$BRAND""$MODEL" >> /tmp/probedisk/probedisk  ### reorganize to output how original probedisk outputs
START=`expr "$START" + 1`
done
cat /tmp/probedisk/probedisk | sort -u > /tmp/probedisk/probedisk
fi

probedisk2 2>/dev/null | grep -v '/dev/sd'
if [ -f /tmp/probedisk/probedisk ]; then
cat /tmp/probedisk/probedisk
fi

rm -r /tmp/probedisk
probepart:

Code: Select all

#!/bin/sh

### wrapper script to fix probepart issues with usb drives

if [ "`cat /proc/partitions | grep sd`" != "" ]; then

if [ -d /tmp/probepart ]; then
rm -r /tmp/probepart
fi
if [ -f /tmp/probepart ]; then
rm -f /tmp/probepart
fi
mkdir /tmp/probepart
mkdir /tmp/probepart/mnt

cat /proc/partitions | grep sd | tr -s ' ' | sed -e 's/ /\|/g' | cut -f 5 -d '|' | grep [0-9] | sort -u > /tmp/probepart/usbdevices

cat /tmp/probepart/usbdevices | sed -e 's/[0-9]//g' | sort -u | while read DEV2
do
fdisk -l /dev/"$DEV2" > /tmp/probepart/probeparttemp
cat /tmp/probepart/probeparttemp | grep -v bytes | grep -v cylinders | grep -v Blocks | sed -e 's/\*//g' | sed -e 's/\+//g' | tr -s ' ' | sed '/^$/d' | sed -e 's/ /\|/g' >> /tmp/probepart/probepart2
done

cat /tmp/probepart/usbdevices | while read DEV
do
if [ "`cat /etc/mtab | grep /dev/"$DEV"`" = "" ]; then
mount /dev/"$DEV" /tmp/probepart/mnt >/dev/null
touch /tmp/probepart/tempmount
fi
SIZE=`cat /proc/partitions | grep "$DEV" | tr -s ' ' | sed -e 's/ /\|/g' | cut -f 4 -d '|'`
SIZE2=`echo "(( "$SIZE" * 2 ))" | bc -l`
if [ "$1" = -m ]; then
SIZE2=`echo "(( "$SIZE2" / 2048.12749 ))" | bc -l | cut -f 1 -d '.'`
fi
TYPE=`cat /etc/mtab | grep /dev/"$DEV" | cut -f 3 -d ' '`
if [ "$TYPE" = "" ]; then
TYPE=`cat /tmp/probepart/probepart2 | grep "$DEV" | cut -f 6 -d '|'`
fi
echo \/dev\/"$DEV"\|`echo "$TYPE"`\|`echo "$SIZE2"`\|`cat /tmp/probepart/probepart2 | grep "$DEV" | cut -f 6 -d '|'` >> /tmp/probepart/probepart
if [ -f /tmp/probepart/tempmount ]; then
umount /tmp/probepart/mnt >/dev/null
rm -f /tmp/probepart/tempmount
fi
done
fi

probepart2 2>/dev/null | grep -v '/dev/sd'
if [ -f /tmp/probepart/probepart ]; then
cat /tmp/probepart/probepart
fi
rm -r /tmp/probepart
Last edited by plinej on Tue 02 Jan 2007, 16:46, edited 1 time in total.

Post Reply