Jump to content











Photo
- - - - -

Some questions about Multi-Boot configuration


  • Please log in to reply
49 replies to this topic

#1 surviver

surviver

    Member

  • Members
  • 33 posts

Posted 11 May 2012 - 12:11 PM

Hi,

last weekend I started with the creation of a multiboot stick, so I'm pretty new to this.
Thanks to G4D, gfxboot.cfg and this Forum I managed far more than I basicly expected, but there some questions left.

Is it possible to boot CDROM directly from G4D? - I've not really found something about that.
Besides that I want to boot the first bootable HDD. I've tried this:

title Boot HDD
chainloader (hd1)+1
rootnoverify (hd1)


but it doesn't work when Plop was loaded, and if the hd is not hd1 it seem to fail also. Any hints?


And just for the knownlege...
I wanted to add g4d to BCD, so I wrote a script to automate this for the drive where it is located. And I really really don't get why this is not working!
Here's what I use:


@echo off

pushd %~d0\boot

for /f "tokens=3" %%i in ('bcdedit /store bcd /create /d "GRUB4DOS" /application bootsector') do (



	bcdedit /store bcd /set %%i device boot

	bcdedit /store bcd /set %%i path \boot\grldr.mbr

)

pause


I get a successed reply for all actions, the BCD file increases its size also, but no entry is shown. :dubbio:
I tried different variations of the script and I also did every single step manual, with same result. The created entry won't show up.
So I think anything in "bcdedit /store bcd /create /d "GRUB4DOS" /application bootsector" is faulty. BUT...
if I use EasyBCD to add grub, and match the path of the Entry, it works.

Next one... Grub4DOS is pretty cool and I'm glad to see some peoaple still working on it, thanks for that!
But I would like to have EFI-compatiblity. So asked my self, maybe it's better to use Grub2?
But there seem to be two version, bios and efi. Do I need to install both? - Is that possible?
Or is G4D the better solution for portable USB?
Or even better to load G2 from G4? - Or, or or...? :idea:

And last one for now...
Are there any other Tools like RipperGFX or other similar flexible, easy to configure ways for gfx boot creation?
I don't know if this normal but, what Ripper creates is unusable buggy for me.

Thanks for your attention.

#2 Wonko the Sane

Wonko the Sane

    The Finder

  • Advanced user
  • 16066 posts
  • Location:The Outside of the Asylum (gate is closed)
  •  
    Italy

Posted 11 May 2012 - 12:54 PM

Too many questions all together.
Most grub4dos related you can answer yourself by reading the guide:
http://diddy.boot-la...os/Grub4dos.htm
Please note how only IDE/EIDE CD/DVD drives are supported by grub4dos, normally if you issue on command line a
root (
[TAB]
command you should have the CD mapped as (cd)
The first hard disk (NO MATTER if "bootable" or not) is hd(0) in grub4dos, and not hd(1) so I really cannot understand the question. :w00t:
IN any cae what you posted: (hd[SPACE]1) is "nothing" in grub4dos. :ph34r:

As always, when experimenting use the command line and NOT a "pre-made" menu.lst entry.

About the bcdedit set of commands, I would rather use a "defined" path, but I guess you are missing the "displayorder" and/or "addlast" comand.
Read here:
http://diddy.boot-la...s/examples1.htm

:cheers:
Wonko

#3 surviver

surviver

    Member

  • Members
  • 33 posts

Posted 11 May 2012 - 01:42 PM

Hmm, I don't know what spaces you're talkin about. There is no space between (hd<->Number) here...
Diddy.boot-land I know as well I found nothin about CD IDE only there...sorry. And about the BCD stuff he's basicly doing the same.
I tried his code to install Grub to BCD also with same result. I also tried it failsave, so...
Failsave means in detail:

Open cmd as Admin and type:
bcdedit /store G:storeboot /create /d "Grub" /application BOOTSECTOR

Wich gives me a succsessed reply with not shown entry, as well.

For testing I'm using VM and bashline of course, thanks for the hint. Without that possibility, I propably wouldn't mess around with menu.lst.
My Multiboot device is actually in full function already and got a pretty cool looking gfx also, started from zero within a single weekend. I think that would not have been possible without reading guides. But as we all I'm just a human, and sometimes I miss something. I'm sorry if I asked idiotic questions.

Edited by surviver, 11 May 2012 - 01:44 PM.


#4 Wonko the Sane

Wonko the Sane

    The Finder

  • Advanced user
  • 16066 posts
  • Location:The Outside of the Asylum (gate is closed)
  •  
    Italy

Posted 11 May 2012 - 02:40 PM

It is the italic font attribute that you used that looks like there is a [SPACE] between hd( and 1), my bad. :(

Use the CODE tags to post CODE, instead ;) (the button with the stupidly chosen pair of "<>" ).

There is a page about CD mapping/booting:
http://diddy.boot-la...les/boot.htm#cd
When grub4dos boot the (cd) device is either available or it is not.
On some particularly pesky BIOSes you may need to use the "old" cdrom --init command (and you will have the cd - if successful - as (cd0))

It is likely that PLoP re-maps disks this is why it is important how the current map is (and see if it needs to be changed).
Still, first disk is (hd0) and second disk is (hd1):
http://diddy.boot-la...iles/syntax.htm

About the BCDEDIT thingy, I have no ideas :(, if not that the command set posted by diddy has been reported to work and the one you posted, when compared to it, misses one command.
Additionally diidy uses a path:

C:BootBCD

and you posted using a path missing the final BCD:

G:storeboot

Maybe with all your attempts the BCD became somehow "unstandard"? Try again with a "fresh" BCD using the commands by diddy. :unsure:

See if you find anything else that you did differently form what is given in the referenced BCDEDIT guide:
http://diddy.boot-la...dedit/index.htm

Can you post thecontents of your BCD?
http://diddy.boot-la.../files/enum.htm

:cheers:
Wonko

#5 surviver

surviver

    Member

  • Members
  • 33 posts

Posted 11 May 2012 - 03:38 PM

Ok, next time I use code tags. For me, most posts here with code tagged menu.lst have strange signs it also. At the beginning, this was really confusing! :loleverybody:
I noticed the other drive mapping of plop and tried to find my HD by loading hd1,0 hd1,1 hd2,0 and so on... of course not in a single command.
I just don't find my HD if plop once is loaded :dubbio:
Well that all are more cosmetical questions, basicly everything is working, and also can boot cdrom using plop. I just thought there's maybe a more direct way...

About BCD... I just forget the BCD in the path I posted. Practicaly it was used, and in my script it's used too.

Here's my BCD dump:
Spoiler


Like I said, I managed to add Grub with use of EasyBCD and editing the entries it made.
But I really would like to know why this isn't possible with BCDedit for me. This is really really strange. I tried it in different VMs also, so its not my machine.
Actually I don't need easy BCD and would like to handle this without it as well.

Edited by surviver, 11 May 2012 - 03:39 PM.


#6 cdob

cdob

    Gold Member

  • Expert
  • 1469 posts

Posted 11 May 2012 - 03:42 PM

but it doesn't work when Plop was loaded, and if the hd is not hd1 it seem to fail also.

Plop may shift hd order. hd1 can mapped to hd2.

but no entry is shown.

I tried his code to install Grub to BCD also with same result.

Did you used http://diddy.boot-la...ws.htm#windows3

#7 surviver

surviver

    Member

  • Members
  • 33 posts

Posted 11 May 2012 - 04:42 PM

Omg... I knew that I'm just to dumb. LoL I really had a look at this every day and just didn't noticed that /store is completely missing in /displayorder. :hammer:
Sometimes I just can't believe myself. You're all free to facepalm. I don't how often I compared my Code to Diddys, but it was way more than one time, until I finally get now. But... isn't it strange that it is not shown if the /displayorder command goes wrong or is missing? - Shouldn't it just be the first entry in that case? How ever, got my script working now. Next time I post the whole script, not only what I think that is essential.

The question about Plop, is basicly HOW does it map the devices.
Thats the part couldn't follow.

I think the question about booting the HD I answered myself, while refomulating the question.
I want Grub chainlaoder to load every HD starting with hd1 until a bootable is found.
This should be the way to go?:


chainloader (hd1) || chainloader (hd2) || chainloader (hd3) || and so on...


I will try that later...

#8 Wonko the Sane

Wonko the Sane

    The Finder

  • Advanced user
  • 16066 posts
  • Location:The Outside of the Asylum (gate is closed)
  •  
    Italy

Posted 11 May 2012 - 06:22 PM

Ok, next time I use code tags. For me, most posts here with code tagged menu.lst have strange signs it also. At the beginning, this was really confusing! :loleverybody:

It's not "for you" only :ph34r:.
See:
http://reboot.pro/15275/
http://pastehtml.com.../b4t99xk89.html
;)


Your approach with "sequential" loading is IMHO a bit "flawed".
You seem like assuming that ALL hard disks (BUT the one you actually want to boot) will "react" by "doing nothing" and "restoring control" to grub4dos :w00t:
The "general" idea is instead to "probe" hard disks and/or volumes in them (WITHOUT "passing control" to their MBR) and choose the "right" one.
In any case the || and && operators only allow a "single" alternative AFAICR (they cannot be "chainloaded" one to another) :unsure:.
Aditionally you may need to change disk order for some Operating Systems and - again generally speaking - establishing a root is always advised (by me).
Using a tag file or a UUID (or disk signature) is a much better/safer approach, additionally this way you can (optionally) "by-pass" MBR and PBR code an chainload directly the OS loader.

:cheers:
Wonko

#9 surviver

surviver

    Member

  • Members
  • 33 posts

Posted 15 May 2012 - 01:00 PM

Well, since i figured out what instead of the strange signs should stand there, I dont' really care about anymore... :good:

As you've promised, my idea didn't work. I've just added some entries which should fit to most Systems, until i maybe find a better solution.
Thanks so far. But one is left...I didn't find any clear answer to that so... What's better for portable UBS? - G4D or G2?
Or actually the question is, can G2 do anything important in a portable enviroment what G4D can't?

Just noticed most people are using G4D for a prendrive. There should be a reason?
Well, it is more handy than G2, but else..?

#10 Wonko the Sane

Wonko the Sane

    The Finder

  • Advanced user
  • 16066 posts
  • Location:The Outside of the Asylum (gate is closed)
  •  
    Italy

Posted 17 May 2012 - 02:57 PM

Be aware than "judging" these booting applications may result in "fanboysm" :ph34r:.
Basically (and IMHO) the advantages that grub4dos has over GRUB2 are:
1.simpler syntax
2.additional capabilities when dealing with MS OS, both DOS and NT based
3.much greater portability/flexibility
And the only advantage of GRUB2 is (limited to Linux Distro's) to be able to mount iso's in a loop device.
(most probably a lot of people will tell you how GRUB2 is "better" more "modern", using feature x or y, what I know is that it has - still IMHO - an unneededly complex syntax and grub.cfg format and does not offer - at least in my limited knowledge of it - any real advantage - exception made
for the mentioned loopdevice - over GRUB legacy).
So grub4dos has many more features than GRUB Legacy, it is very portable, can run from almost any OS or other bootloader, whilst GRUB2 is far less portable and offers no particular advantage, but with a much more complex syntax/structure.

I have no doubts on which one to choose, but noone limits the possibilities of using one or the other (or Isolinux/Syslinux and/or PLoP) together or either as primary or secundary bootloader/bootmanager, I have normally sticks using the default 2K/XP MBR/PBR/NTLDR/BOOT.INI from which I invoke grldr, and from it I can load either PLoP or GRUB2 or Syslinux, there is nothing bad in try getting the best from each.

:cheers:
Wonko

#11 surviver

surviver

    Member

  • Members
  • 33 posts

Posted 18 May 2012 - 09:23 AM

Thanks for your assessment.
I expected G2 has more compatible features and more flexibility, because, like you've said, it is newer and has more active development.
But I hoped to hear what you've just said. :good:

#12 surviver

surviver

    Member

  • Members
  • 33 posts

Posted 24 May 2012 - 10:32 AM

I need to call you guys for help another time...

When hiddenmenu is used, shouldn't that hidden entry show up again if you press ESC?
For any reason this does not work for me. If I use hiddenmenu, it will stay hidden, no matter what I do.
Also tried to set a global password and pressed p with same result... what once is hidden, stays hidden.
I just don't get whats going wrong here, a missing command maybe?


########################

hiddenmenu Private Area

#password --md5 SomeLetters

configfile /Zeugz/sub


Well, I just could pw-protect that single entry, but I would prefer if the entrie is not shown and usable anyways.
I often give my Pendrive to my mates and there are some tools not everyone should know about. A visible pw-protected entry just makes them nosey. :loleverybody:

#13 surviver

surviver

    Member

  • Members
  • 33 posts

Posted 26 May 2012 - 11:21 AM

No one?.. :cold:

I really would like to see this work, but I just don't have any more clues.
Tried dozens of variants with --chkpass / hiddenmenu --off, hold shift / ESC and so on... but I propably get this feature completly wrong.

Most related stuff I can find on google, is chinese and didn't really help me. English/German stuff I found, seems outdated.
A short working example would be just awsome.

Here is my last try. Whats wrong..?


---Menu.lst---

default 3

timeout 10

password  MyPass



hiddenmenu --chkpass HiddenTest

configfile /boot/sub.lst

----Menu.lst END----





---Sub.lst-----

title Hidden1

chainloader /bootmgr



title Hidden2

chainloader /ntldr

-----Sub.lst END------



#14 Wonko the Sane

Wonko the Sane

    The Finder

  • Advanced user
  • 16066 posts
  • Location:The Outside of the Asylum (gate is closed)
  •  
    Italy

Posted 26 May 2012 - 12:47 PM

Here is my last try. Whats wrong..?

Last time I checked it hiddenmenu had NO "menu name parameter".
If you prefer, it is a "global" setting.
http://reboot.pro/7322/
Try:

---Menu.lst---

default 3

timeout 10

password MyPass



hiddenmenu --chkpass 

title HiddenTest

configfile /boot/sub.lst

----Menu.lst END----





---Sub.lst-----

title Hidden1

chainloader /bootmgr



title Hidden2

chainloader /ntldr

-----Sub.lst END------

:cheers:
Wonko

#15 surviver

surviver

    Member

  • Members
  • 33 posts

Posted 26 May 2012 - 04:38 PM

I did copy'n paste your code and nothing gets hidden. I started with something like that also.
I could swear, in the beginning when I had a short look to this, I had it working global, with an earlier version of G4D.
But now, even this does not work.

If I can go for sure that "hiddenmenu ItemName" is definitaly wrong, then the follwing should work well to have an empty submenu, until a pw is entered.
Shouldn't it?


---Menu.lst---

default 3

timeout 10

password MyPass



title HiddenSubMenu

configfile /boot/sub.lst

----Menu.lst END----





---Sub.lst-----

hiddenmenu --chkpass



title Hidden1

chainloader /bootmgr



title Hidden2

chainloader /ntldr

-----Sub.lst END------


It don't. Everythging is full accessable.
How ever... if the Feature just can hide the content of a whole .lst, it actually is not what I've been looking for.
So I have to go by simply pw-protecting a specified entry. To bad...
If someone knows a way to hide a singly menu entry anyhow, please don't hesitate to post the instrucions here. ;)
Thanks so far...

Edited by surviver, 26 May 2012 - 04:39 PM.


#16 Wonko the Sane

Wonko the Sane

    The Finder

  • Advanced user
  • 16066 posts
  • Location:The Outside of the Asylum (gate is closed)
  •  
    Italy

Posted 26 May 2012 - 05:09 PM

I did copy'n paste your code and nothing gets hidden. I started with something like that also.
I could swear, in the beginning when I had a short look to this, I had it working global, with an earlier version of G4D.
But now, even this does not work.


It don't. Everythging is full accessable.
How ever... if the Feature just can hide the content of a whole .lst, it actually is not what I've been looking for.
So I have to go by simply pw-protecting a specified entry. To bad...
If someone knows a way to hide a singly menu entry anyhow, please don't hesitate to post the instrucions here. ;)
Thanks so far...

The hiddenmenu is a "remainder" of Grub legacy, it is possible that something has changed in recent grub4dos versions. :unsure:
Try without the --chkpass

:cheers:
Wonko

#17 surviver

surviver

    Member

  • Members
  • 33 posts

Posted 26 May 2012 - 10:55 PM

As far as I can follow the changelogs, --chkpass even got enhanced by e.g "--chkpass=0x2200" to specify a key.
I got hiddenmenu working, but can't tell you why. :loleverybody:
--chkpass does, just nothing.

Latest stuff I found on google is this.
But the posted code works for me neither. And besides that, I have no idea what they actually talking about. :confused1:
With a look to the features, I still think my native plan should be manageable, and I just don't know how.
But it seems a little buggy feature also. This keeps me nibbling on me... <_<

Edited by surviver, 26 May 2012 - 10:57 PM.


#18 Wonko the Sane

Wonko the Sane

    The Finder

  • Advanced user
  • 16066 posts
  • Location:The Outside of the Asylum (gate is closed)
  •  
    Italy

Posted 27 May 2012 - 12:34 PM

Whenever all else fails, READ the §@ç#ing Manual!:
OK, it is ONLY in the Chinese version :ph34r: of the read-me README_GRUB4DOS_CN.txt, but Google Translate may help:

2010-12-31 updates:
1.pause command enhanced to increase the display key function of the scan code. Need to debug -1.
Example: a key scan code
the debug -1 && the pause && debug 1
Note: This function has parameters - test - the key instead.

2.hiddenmenu command enhancements. Add a - chkpass parameters
Functions: in the hidden menu by pressing the Esc key to enter the correct password before you can display the menu.
Note: (1) the feature is enabled, if the press other key to start the default menu.
Default the Esc key can be set free. - Chkpass = KEY
Menu initialization password command only need to enter a password.
3 key code if you do not know can use the above function to obtain.
Example: hiddenmenu - chkpass = 0x8500 press the F11 key before they can display the menu.
hiddenmenu - chkpass can press the Esc key to display the menu.
hiddenmenu - chkpass = 0x2200 press Alt + G to display the menu.


:cheers:
Wonko

#19 surviver

surviver

    Member

  • Members
  • 33 posts

Posted 27 May 2012 - 06:25 PM

Well, for me even rtfm failed.
But I'm happy to tell ya guys, I guess I fully understood this feature now, and got it working.
It is not really able to do what I've expected, but here's my experience anyways, in case someone finds this usefull.

First of all, --chkpass=0x8500 does not work! (v0.4.5c 05/22/12)
Since Alt+G is a bit uncomfortable, at least with a short timeout, I suggest to stick with the default, ESC.
Secound, a timeout must have been set in hiddenmenu.lst! (not 0)

If you want to hide a .lst completly, this is only possible if the native menu.lst contains what you want to hide.
The submenu.lst contains, what is accessable to everyone. This did it for me:
Spoiler


This way you got 3 seconds to spam ESC while booting up, to get the password dialog.
If you miss it, you need to reboot and retry, to get access to the hidden content. Except you set a "back to menu.lst" entry in submenu.lst,
wich also means the hidden content is not fully hidden anymore and you could do it the following way as well, or even better.


This other way is... mark the submenu.lst as hidden and create a link to it, in menu.lst.
But the onliest benefit to me, compared to simply pw-protect this link, is that the pw-dialog is not shown until you press ESC.
Without the knownlege and a low timeout, this looks like an entry without any use.
I'm not really happy with both variants. But you got to eat what you can get... :beer:

If there's still something I forgot, got wrong or simply missed, feel free to correct/enhance what I've posted.

Have a nice day!
Special thanks to wonko, for beeing that patient with me.

Edited by surviver, 27 May 2012 - 06:30 PM.


#20 Wonko the Sane

Wonko the Sane

    The Finder

  • Advanced user
  • 16066 posts
  • Location:The Outside of the Asylum (gate is closed)
  •  
    Italy

Posted 27 May 2012 - 06:41 PM

The F11 is one (grub4dos set apart) "strange" keys, I was never able to find a way to have it working in MBLDR. (and never managed to really understand WHY, it is probably different scancodes on different BIOSes/whatever :unsure:)
Maybe you can try with a key in the F1÷F10 range which is more "standard".
See the section "Keyboard BIOS Scan Code/ASCII code tables" (in the English Read-me"):
Key Normal Shifted w/Ctrl w/Alt



F1 3B00 5400 5E00 6800

F2 3C00 5500 5F00 6900

F3 3D00 5600 6000 6A00

F4 3E00 5700 6100 6B00

F5 3F00 5800 6200 6C00

F6 4000 5900 6300 6D00

F7 4100 5A00 6400 6E00

F8 4200 5B00 6500 6F00

F9 4300 5C00 6600 7000

F10 4400 5D00 6700 7100

F11 8500 8700 8900 8B00

F12 8600 8800 8A00 8C00

:cheers:
Wonko

#21 surviver

surviver

    Member

  • Members
  • 33 posts

Posted 27 May 2012 - 07:03 PM

Thanks for this Info. If I'm bored next time, I probably will have another look to this.

I forgot my buttom line in the post above...
I'm currently using none of both methods. I just leave submenu.lst alone.
No linking/calling for it in menu.lst. And in case I need my hidden stuff, I just call for submenu.lst
in the pw-protected commandline, that's it. Easy, quick and without the knownledge not even conjecturable that there's somthing hidden.

Edited by surviver, 27 May 2012 - 07:06 PM.


#22 steve6375

steve6375

    Platinum Member

  • Developer
  • 7566 posts
  • Location:UK
  • Interests:computers, programming (masm,vb6,C,vbs), photography,TV,films
  •  
    United Kingdom

Posted 28 May 2012 - 06:27 PM

Try
hiddenmenu chkpass=0x8500
You have to tell grub4dos it is in hex or it will treat it as a decimal number! The menus below work using F11 to show the first menu.lst menu...

e.g.
MENU.LST

write (md)0x220+1 !BATnecho -n -P:0000 $[0133]					  --- HIDDEN MENU ---									

initscript (md)0x220+1

timeout 3

password rm

# hit F11 and enter password to remain on this menu

hiddenmenu --chkpass=0x8500



title Goto the public menu

configfile /submenu.lst



title Hidden menu 1

root ()



title Hidden menu 2

root ()


SUBMENU.LST

write (md)0x220+1 !BATnecho -n -P:0000 $[0133]					  --- PUBLIC MENU ---									  

initscript (md)0x220+1

hiddenmenu --off

default 1



title Goto Hidden menu.lstnPress F11 and enter the secret password!

configfile /menu.lst



title Public menu 2

root ()



title more public stuff

root ()


to get the correct scancode, press c to get to the command line and then type

debug on

pause --test-key

then press the key that you want to get the code of - e.g. F11 gives 8500 and then add 0x in front of it = 0x8500
Note that different BIOSes may give different scan codes, so do it on the system you want the stick to run on - or choose a more universal key code!

Do not use a default x statement or grub4dos will execute menu item x after the timeout. - OR - make sure the xth menu item is the one that loads the public menu and then you can use default x if you really want to.

#23 Wonko the Sane

Wonko the Sane

    The Finder

  • Advanced user
  • 16066 posts
  • Location:The Outside of the Asylum (gate is closed)
  •  
    Italy

Posted 28 May 2012 - 06:38 PM

You have to tell grub4dos it is in hex or it will treat it as a decimal number! The menus below work using F11 to show the first menu.lst menu...

Check again the post#19:

First of all, --chkpass=0x8500 does not work! (v0.4.5c 05/22/12)

(and possibly also #20 ;)).

Note that different BIOSes may give different scan codes, so do it on the system you want the stick to run on - or choose a more universal key code!

In my simplicity, since the base idea is a multi-boot stick (which I presume will be used to boot different systems), it makes very little sense to use a particular scancode that reportedly works only on some BIOSes.... :whistling: (while seemingly other F keys are "standard" :dubbio:)

:cheers:
Wonko

#24 steve6375

steve6375

    Platinum Member

  • Developer
  • 7566 posts
  • Location:UK
  • Interests:computers, programming (masm,vb6,C,vbs), photography,TV,films
  •  
    United Kingdom

Posted 28 May 2012 - 07:04 PM

Sorry - should have said I used 0.4.6a 2012-03-26 which does work and is included in latest RMPrepUSB 2.1.647.
0.4.5c 2012-05-22 does not work. [Edit] retested with above menu and it DOES work too!

#25 Wonko the Sane

Wonko the Sane

    The Finder

  • Advanced user
  • 16066 posts
  • Location:The Outside of the Asylum (gate is closed)
  •  
    Italy

Posted 28 May 2012 - 07:17 PM

Sorry - should have said I used 0.4.6a 2012-03-26 which does work and is included in latest RMPrepUSB 2.1.647.
0.4.5c 2012-05-22 does not work.

It must be a regression bug of some kind :ph34r: the Chinese readme gives the "new feature" as dated 2010-12-31 :dubbio:

:cheers:
Wonko




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users