2004-11-29 21:33:21

by J.A. Magallon

[permalink] [raw]
Subject: cdrecord dev=ATA cannont scanbus as non-root

Hi all...

I'm trying to get out of the mess that cd burning looks like nowadays in
linux...

As I use a 2.6.x kernel, I folowed this hints:
- no suid cdrecord, it uses capabilities
- make the burner owned by console user (pam)

cdrecord burns ok using dev=/dev/burner, but I can't get GUI tools to
burn using the /dev interface. All of them try to load ide-scsi, and
do a scan based on ATAPI:.
Some tools try to scan with dev=ATA:x:y:z, but that does not work as
normal user.

How can I make 'cdrecord dev=ATA -scanbus' work as non-root ?

TIA

--
J.A. Magallon <jamagallon()able!es> \ Software is like sex:
werewolf!able!es \ It's better when it's free
Mandrakelinux release 10.2 (Cooker) for i586
Linux 2.6.10-rc2-jam3 (gcc 3.4.1 (Mandrakelinux 10.1 3.4.1-4mdk)) #1



2004-11-29 21:50:32

by Jan Engelhardt

[permalink] [raw]
Subject: Re: cdrecord dev=ATA cannont scanbus as non-root

>Hi all...
>
>I'm trying to get out of the mess that cd burning looks like nowadays in
>linux...
>
>As I use a 2.6.x kernel, I folowed this hints:
>- no suid cdrecord, it uses capabilities
>- make the burner owned by console user (pam)
>
>cdrecord burns ok using dev=/dev/burner, but I can't get GUI tools to
>burn using the /dev interface. All of them try to load ide-scsi, and
>do a scan based on ATAPI:.
>Some tools try to scan with dev=ATA:x:y:z, but that does not work as
>normal user.

Maybe because it should have been dev=ATAPI: ?

>How can I make 'cdrecord dev=ATA -scanbus' work as non-root ?

Weird, works for me:

22:49 io:~ > cdrecord -dev=ATAPI: -scanbus
Cdrecord-Clone 2.01 (i686-suse-linux) Copyright (C) 1995-2004 J?rg Schilling
Note: This version is an unofficial (modified) version
Note: and therefore may have bugs that are not present in the original.
Note: Please send bug reports or support requests to
http://www.suse.de/feedbackNote: The author of cdrecord should not be bothered
with problems in this version.
scsidev: 'ATAPI:'
devname: 'ATAPI'
scsibus: -1 target: -1 lun: -1
Warning: Using ATA Packet interface.
Warning: The related Linux kernel interface code seems to be unmaintained.
Warning: There is absolutely NO DMA, operations thus are slow.
cdrecord: No such file or directory. Cannot open SCSI driver.
cdrecord: For possible targets try 'cdrecord -scanbus'. Make sure you are root.
cdrecord: For possible transport specifiers try 'cdrecord dev=help'.
22:50 io:/dev # chmod 666 /dev/hdd
22:50 io:~ > cdrecord -dev=ATAPI: -scanbus
Cdrecord-Clone 2.01 (i686-suse-linux) Copyright (C) 1995-2004 J?rg Schilling
[...]
Warning: The related Linux kernel interface code seems to be unmaintained.
Warning: There is absolutely NO DMA, operations thus are slow.
Using libscg version 'schily-0.8'.
scsibus0:
0,0,0 0) *
0,1,0 1) 'AOPEN ' 'CD-RW CRW1232PRO' '1.00' Removable CD-ROM
0,2,0 2) *
0,3,0 3) *
0,4,0 4) *
0,5,0 5) *
0,6,0 6) *
0,7,0 7) *

And further (in addition to above):
22:50 io:/dev # chmod 666 /dev/hdb
22:50 io:~ > cdrecord -dev=ATAPI: -scanbus
scsibus0:
0,0,0 0) *
cdrecord: Warning: controller returns wrong size for CD capabilities page.
0,1,0 1) ' ' 'ATAPI CDROM ' '100H' Removable CD-ROM
0,2,0 2) *
0,3,0 3) *
0,4,0 4) *
0,5,0 5) *
0,6,0 6) *
0,7,0 7) *
scsibus1:
1,0,0 100) *
1,1,0 101) 'AOPEN ' 'CD-RW CRW1232PRO' '1.00' Removable CD-ROM
1,2,0 102) *
1,3,0 103) *
1,4,0 104) *
1,5,0 105) *
1,6,0 106) *
1,7,0 107) *

Apart from the fact that scsibus shifts up by one, Works For Me(TM)


Jan Engelhardt
--
Gesellschaft für Wissenschaftliche Datenverarbeitung
Am Fassberg, 37077 Göttingen, http://www.gwdg.de

2004-11-29 22:03:27

by J.A. Magallon

[permalink] [raw]
Subject: Re: cdrecord dev=ATA cannont scanbus as non-root


On 2004.11.29, Jan Engelhardt wrote:
> >Hi all...
> >
> >I'm trying to get out of the mess that cd burning looks like nowadays in
> >linux...
> >
> >As I use a 2.6.x kernel, I folowed this hints:
> >- no suid cdrecord, it uses capabilities
> >- make the burner owned by console user (pam)
> >
> >cdrecord burns ok using dev=/dev/burner, but I can't get GUI tools to
> >burn using the /dev interface. All of them try to load ide-scsi, and
> >do a scan based on ATAPI:.
> >Some tools try to scan with dev=ATA:x:y:z, but that does not work as
> >normal user.
>
> Maybe because it should have been dev=ATAPI: ?
>
> >How can I make 'cdrecord dev=ATA -scanbus' work as non-root ?
>
> Weird, works for me:
>
> 22:49 io:~ > cdrecord -dev=ATAPI: -scanbus

dev=ATAPI uses ide-scsi interface, through /dev/sgX. And:

> scsibus: -1 target: -1 lun: -1
> Warning: Using ATA Packet interface.
> Warning: The related Linux kernel interface code seems to be unmaintained.
> Warning: There is absolutely NO DMA, operations thus are slow.

dev=ATA uses direct IDE burning. Try that as root. In my box, as root:

werewolf:~# cdrecord dev=ATAPI -scanbus
scsibus0:
0,0,0 0) *
0,1,0 1) 'TOSHIBA ' 'DVD-ROM SD-M1712' '1004' Removable CD-ROM
0,2,0 2) *
0,3,0 3) *
0,4,0 4) *
0,5,0 5) *
0,6,0 6) *
0,7,0 7) *
scsibus1:
1,0,0 100) 'HL-DT-ST' 'DVDRAM GSA-4120B' 'A102' Removable CD-ROM
1,1,0 101) *
1,2,0 102) *
1,3,0 103) *
1,4,0 104) *
1,5,0 105) *
1,6,0 106) *
1,7,0 107) *

werewolf:~# cdrecord dev=ATA -scanbus
scsidev: 'ATA'
devname: 'ATA'
scsibus: -2 target: -2 lun: -2
#########################################################################################
#
# Warning: Using ATAPI via /dev/hd* interface. Use dev=ATA:X,Y,Z or dev=/dev/hdX
#
#########################################################################################

scsibus0:
0,0,0 0) *
0,1,0 1) 'TOSHIBA ' 'DVD-ROM SD-M1712' '1004' Removable CD-ROM
0,2,0 2) *
0,3,0 3) *
0,4,0 4) *
0,5,0 5) *
0,6,0 6) *
0,7,0 7) *
scsibus1:
1,0,0 100) 'HL-DT-ST' 'DVDRAM GSA-4120B' 'A102' Removable CD-ROM
1,1,0 101) *
1,2,0 102) *
1,3,0 103) *
1,4,0 104) *
1,5,0 105) *
1,6,0 106) *
1,7,0 107) *

The scan through ATA lasts much less than with ATAPI, and you can burn with
dev=ATA:1,0,0 or dev=/dev/burner, which is the new recommended way.

But as I said, scanning through ATA is not avaliable to normal users, so
it is someway useless.

--
J.A. Magallon <jamagallon()able!es> \ Software is like sex:
werewolf!able!es \ It's better when it's free
Mandrakelinux release 10.2 (Cooker) for i586
Linux 2.6.10-rc2-jam3 (gcc 3.4.1 (Mandrakelinux 10.1 3.4.1-4mdk)) #1


2004-11-30 06:51:34

by Jan Engelhardt

[permalink] [raw]
Subject: Re: cdrecord dev=ATA cannont scanbus as non-root

>dev=ATAPI uses ide-scsi interface, through /dev/sgX. And:

I do not have the ide-scsi.ko module even compiled, and it works.
The ATA: scanbus thing works for me as a normal user too (forgot to add that)


--
Gesellschaft für Wissenschaftliche Datenverarbeitung
Am Fassberg, 37077 Göttingen, http://www.gwdg.de

2004-11-30 07:17:17

by Jens Axboe

[permalink] [raw]
Subject: Re: cdrecord dev=ATA cannont scanbus as non-root

On Mon, Nov 29 2004, J.A. Magallon wrote:
> dev=ATAPI uses ide-scsi interface, through /dev/sgX. And:
>
> > scsibus: -1 target: -1 lun: -1
> > Warning: Using ATA Packet interface.
> > Warning: The related Linux kernel interface code seems to be unmaintained.
> > Warning: There is absolutely NO DMA, operations thus are slow.
>
> dev=ATA uses direct IDE burning. Try that as root. In my box, as root:

Oh no, not this again... Please check the facts: the ATAPI method uses
the SG_IO ioctl, which is direct-to-device. It does _not_ go through
/dev/sgX, unless you actually give /dev/sgX as the device name. It has
nothing to do with ide-scsi. Period.

ATA uses CDROM_SEND_PACKET. This has nothing to do with direct IDE
burning, it's a crippled interface from the CDROM layer that should not
be used for anything. scsi-linux-ata.c should be ripped from the
cdrecord sources, or at least cdrecord should _never_ select that
transport for 2.6 kernels. For 2.4 you are far better off using
ide-scsi.

> The scan through ATA lasts much less than with ATAPI, and you can burn with
> dev=ATA:1,0,0 or dev=/dev/burner, which is the new recommended way.

No! ATAPI is the recommended way.

--
Jens Axboe

2004-11-30 16:30:59

by J.A. Magallon

[permalink] [raw]
Subject: Re: cdrecord dev=ATA cannont scanbus as non-root


On 2004.11.30, Jens Axboe wrote:
> On Mon, Nov 29 2004, J.A. Magallon wrote:
> > dev=ATAPI uses ide-scsi interface, through /dev/sgX. And:
> >
> > > scsibus: -1 target: -1 lun: -1
> > > Warning: Using ATA Packet interface.
> > > Warning: The related Linux kernel interface code seems to be unmaintained.
> > > Warning: There is absolutely NO DMA, operations thus are slow.
> >
> > dev=ATA uses direct IDE burning. Try that as root. In my box, as root:
>
> Oh no, not this again... Please check the facts: the ATAPI method uses
> the SG_IO ioctl, which is direct-to-device. It does _not_ go through
> /dev/sgX, unless you actually give /dev/sgX as the device name. It has
> nothing to do with ide-scsi. Period.
>
> ATA uses CDROM_SEND_PACKET. This has nothing to do with direct IDE
> burning, it's a crippled interface from the CDROM layer that should not
> be used for anything. scsi-linux-ata.c should be ripped from the
> cdrecord sources, or at least cdrecord should _never_ select that
> transport for 2.6 kernels. For 2.4 you are far better off using
> ide-scsi.
>
> > The scan through ATA lasts much less than with ATAPI, and you can burn with
> > dev=ATA:1,0,0 or dev=/dev/burner, which is the new recommended way.
>
> No! ATAPI is the recommended way.
>
> --
> Jens Axboe
>
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>
>

--
J.A. Magallon <jamagallon()able!es> \ Software is like sex:
werewolf!able!es \ It's better when it's free
Mandrakelinux release 10.2 (Cooker) for i586
Linux 2.6.10-rc2-jam3 (gcc 3.4.1 (Mandrakelinux 10.1 3.4.1-4mdk)) #1


2004-11-30 17:14:16

by J.A. Magallon

[permalink] [raw]
Subject: Re: cdrecord dev=ATA cannont scanbus as non-root

On 2004.11.30, Jens Axboe wrote:
> On Mon, Nov 29 2004, J.A. Magallon wrote:
> > dev=ATAPI uses ide-scsi interface, through /dev/sgX. And:
> >
> > > scsibus: -1 target: -1 lun: -1
> > > Warning: Using ATA Packet interface.
> > > Warning: The related Linux kernel interface code seems to be unmaintained.
> > > Warning: There is absolutely NO DMA, operations thus are slow.
> >
> > dev=ATA uses direct IDE burning. Try that as root. In my box, as root:
>
> Oh no, not this again... Please check the facts: the ATAPI method uses
> the SG_IO ioctl, which is direct-to-device. It does _not_ go through
> /dev/sgX, unless you actually give /dev/sgX as the device name. It has
> nothing to do with ide-scsi. Period.
>
> ATA uses CDROM_SEND_PACKET. This has nothing to do with direct IDE
> burning, it's a crippled interface from the CDROM layer that should not
> be used for anything. scsi-linux-ata.c should be ripped from the
> cdrecord sources, or at least cdrecord should _never_ select that
> transport for 2.6 kernels. For 2.4 you are far better off using
> ide-scsi.
>
> > The scan through ATA lasts much less than with ATAPI, and you can burn with
> > dev=ATA:1,0,0 or dev=/dev/burner, which is the new recommended way.
>
> No! ATAPI is the recommended way.
>

Ahh, I think I found the problem....

I tried scanning with dev=ATAPI, and cdrecord did not found anything.
Then I tried in my home box, and it found the burner.
The problem is that in the 'strange' box the burner is hdh, and the
hard drive for system is hde. The previous IDE channels are unused
(an on-board promise with ide[01], hd[abcd]).
I use udev, so there is no hd[a-d] nodes on /dev. And cdrecord
_EXITS_ as soon as it founds a non-existent device !!!

With a quick'n'dirty hack (ln -s hde hd[abcdfg]), cdrecord finally
got the list:

nada:~> cdrecord dev=ATAPI -scanbus
Cdrecord-Clone 2.01-dvd (i686-pc-linux-gnu) Copyright (C) 1995-2004 J�g Schilling
Note: This version is an unofficial (modified) version with DVD support
Note: and therefore may have bugs that are not present in the original.
Note: Please send bug reports or support requests to <[email protected]>.
Note: The author of cdrecord should not be bothered with problems in this version.
scsidev: 'ATAPI'
devname: 'ATAPI'
scsibus: -2 target: -2 lun: -2
Warning: Using ATA Packet interface.
Warning: The related Linux kernel interface code seems to be unmaintained.
Warning: There is absolutely NO DMA, operations thus are slow.
Using libscg version 'schily-0.8'.
scsibus0:
0,0,0 0) *
0,1,0 1) 'HL-DT-ST' 'DVDRAM GSA-4040B' 'A300' Removable CD-ROM
0,2,0 2) *
0,3,0 3) *
0,4,0 4) *
0,5,0 5) *
0,6,0 6) *
0,7,0 7) *

I will try to look at the cdrecord sources and make a real patch...
I suppose cdrecord will have a bugzilla or mailing list.

Many things will have to change with udev ;)

Thanks for your time and explanations.

--
J.A. Magallon <jamagallon()able!es> \ Software is like sex:
werewolf!able!es \ It's better when it's free
Mandrakelinux release 10.2 (Cooker) for i586
Linux 2.6.10-rc2-jam3 (gcc 3.4.1 (Mandrakelinux 10.1 3.4.1-4mdk)) #1


2004-11-30 17:40:59

by Jan Engelhardt

[permalink] [raw]
Subject: Re: cdrecord dev=ATA cannont scanbus as non-root

>I tried scanning with dev=ATAPI, and cdrecord did not found anything.
>Then I tried in my home box, and it found the burner.
>The problem is that in the 'strange' box the burner is hdh, and the
>hard drive for system is hde. The previous IDE channels are unused
>(an on-board promise with ide[01], hd[abcd]).

IMO that should not worry cdrecord where the burner is.

>I use udev, so there is no hd[a-d] nodes on /dev. And cdrecord
>_EXITS_ as soon as it founds a non-existent device !!!

You can find something that does not exist?

>Many things will have to change with udev ;)

I have udev AND like /dev/hdh, even though I don't have an extra IDE
controller. Yay to static entries.
Try mknod'ding hda and so forth (instead of symlinking) and then scanbus the
thing. Does it show up?



Jan Engelhardt
--
ENOSPC

2004-11-30 17:53:00

by J.A. Magallon

[permalink] [raw]
Subject: Re: cdrecord dev=ATA cannont scanbus as non-root


On 2004.11.30, Jan Engelhardt wrote:
>
> >I use udev, so there is no hd[a-d] nodes on /dev. And cdrecord
> >_EXITS_ as soon as it founds a non-existent device !!!
>
> You can find something that does not exist?

Err, as it tries to open a device and it does not exist.
I tries sequentially
hda, hdb, hdc.. up to 256 until it finds something to open.
If it exists, but has not permissions, it keeps trying on the next.
But if it is not present, cdrecord gives up.

--
J.A. Magallon <jamagallon()able!es> \ Software is like sex:
werewolf!able!es \ It's better when it's free
Mandrakelinux release 10.2 (Cooker) for i586
Linux 2.6.10-rc2-jam3 (gcc 3.4.1 (Mandrakelinux 10.1 3.4.1-4mdk)) #1


2004-11-30 18:02:02

by Jan Engelhardt

[permalink] [raw]
Subject: Re: cdrecord dev=ATA cannont scanbus as non-root

>Err, as it tries to open a device and it does not exist.
>I tries sequentially
>hda, hdb, hdc.. up to 256 until it finds something to open.
>If it exists, but has not permissions, it keeps trying on the next.
>But if it is not present, cdrecord gives up.

Reasonable procedure. Albeit, leaky:
Imagine you use devfs... open()ing something like hd* would probably always
create a node. Although there is a max on possible, meaningful, nodes,
someone could use this to fill up /dev with
ridiculuous amounts of nodes, all of which are to my knowledge in kernel space.
"Well then, goodbye".

Luckily, even the very default config does not create arbitrarily nodes, and
cdrecord doesnot probe arbitr. devices.

So I guess, yes, cdrecord should probe harder. Preferably by looking into /sys
when using a 2.6 system.



Jan Engelhardt
--
ENOSPC

2004-11-30 18:29:58

by J.A. Magallon

[permalink] [raw]
Subject: Re: cdrecord dev=ATA cannont scanbus as non-root


On 2004.11.30, Jan Engelhardt wrote:
> >Err, as it tries to open a device and it does not exist.
> >I tries sequentially
> >hda, hdb, hdc.. up to 256 until it finds something to open.
> >If it exists, but has not permissions, it keeps trying on the next.
> >But if it is not present, cdrecord gives up.
>
> Reasonable procedure. Albeit, leaky:
> Imagine you use devfs... open()ing something like hd* would probably always
> create a node. Although there is a max on possible, meaningful, nodes,
> someone could use this to fill up /dev with
> ridiculuous amounts of nodes, all of which are to my knowledge in kernel space.
> "Well then, goodbye".
>
> Luckily, even the very default config does not create arbitrarily nodes, and
> cdrecord doesnot probe arbitr. devices.
>
> So I guess, yes, cdrecord should probe harder. Preferably by looking into /sys
> when using a 2.6 system.
>

Patch for cdrecord:

--- cdrtools-2.01/libscg/scsi-linux-ata.c.orig 2004-11-30 19:02:37.929176615 +0100
+++ cdrtools-2.01/libscg/scsi-linux-ata.c 2004-11-30 19:06:11.316213702 +0100
@@ -385,8 +385,6 @@
device, f, errno);
}
return (-2);
- } else if (errno == ENOENT || errno == ENODEV) {
- break;
}
} else {
/* ugly hack, make better, when you can. Alex */

--
J.A. Magallon <jamagallon()able!es> \ Software is like sex:
werewolf!able!es \ It's better when it's free
Mandrakelinux release 10.2 (Cooker) for i586
Linux 2.6.10-rc2-jam3 (gcc 3.4.1 (Mandrakelinux 10.1 3.4.1-4mdk)) #1