Remount Failed: Operation Not Permited - Nexus One General

Hey guys. I've done commands in adb many times. I'm still new to it, but I never remember having this issue.
I've ran CM6 for months, and nightly's as well. I'm running a custom compiled CM6 right now though.
adb remount I get
remount failed, operation not permitted.. and in default.prop ro.secure is set to 1. I changed to 0 but still can't do remount. Any other suggestions?
Thanks!

For a workaround, try remounting through shell - mount -o rw,remount /system, or the full command (mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system).

is that a temporary fix, or for good. or just a work around?

Just a workaround. It's a command in OS itself that does the same job as "adb remount" - which is, remounts.
I just can't think of anything that would cause adb remount to fail, so I have no suggestions for you to try. But in case you want to be able to do something without getting stuck, and wait for the solution without being in a hurry - I've posted the workaround.

I don't have a solution to solve it once and for all, but every time you want to remount, use
PHP:
adb root
before your commands

excellent.
adb root
adbd is being restarted
adb remount succeeded .
Thanks dude! that will work for now til cooker fixes that. lol

Jack_R1 said:
For a workaround, try remounting through shell - mount -o rw,remount /system, or the full command (mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system).
Click to expand...
Click to collapse
Tried this and it appeared to succeed but I didn't get the results I wanted.
After doing this I tried push c:\com.amazon.mp3.apk \system\app\ and it repeated it back to me, but when I look in that directory, it's not there. What am I doing wrong?

Wrong direction of slashes:
push c:\com.amazon.mp3.apk /system/app/
And you shouldn't be doing it from the ADB shell. The remount is done in the shell, the push is done outside of it.

Jack_R1 said:
Wrong direction of slashes:
push c:\com.amazon.mp3.apk /system/app/
Click to expand...
Click to collapse
Ahhhh, I was wondering about that! Thank you!!
And you shouldn't be doing it from the ADB shell. The remount is done in the shell, the push is done outside of it.
Click to expand...
Click to collapse
So once I perform the remount I exit out of the shell?

operation not permitted.

"adb push" gets you "not permitted"?
try "adb root" first, as suggested above.

Jack_R1 said:
"adb push" gets you "not permitted"?
try "adb root" first, as suggested above.
Click to expand...
Click to collapse
adb root gets me something along the lines of "not supported on a stock build."
EDIT
ok...
adb shell
su
mount -o rw,remount /system
then i get this:
Usage: mount [-r] [-w] [-o options] [-t type] device directory
So it appears it's not actually registering the command?
Then I try
push c:\com.amazon.mp3.apk /system/app/
and I get: failed to copy 'c:\com.amazon.mp3.apk' to '/system/app/com.amazon.mp3.apk' : Read-only file system.

You need to use the full command, since you're running sh, not bash.
Look for the full command in my post.
Yes, currently it doesn't do a thing.

Jack_R1 said:
You need to use the full command, since you're running sh, not bash.
Look for the full command in my post.
Yes, currently it doesn't do a thing.
Click to expand...
Click to collapse
So I tried the full command and exited out to "dos" command prompt and tried again. This time I got "failed to copy.... ....permission denied."

Ok, try without exiting. I'm not sure it'll do anything useful, though.
There is some problem with either your ADB setup or the ROM you're using. Or you're just not rooted.

Jack_R1 said:
Ok, try without exiting. I'm not sure it'll do anything useful, though.
There is some problem with either your ADB setup or the ROM you're using. Or you're just not rooted.
Click to expand...
Click to collapse
Found another thread on another board. I just flashed amon ra's recovery and booted up from there, and it appeared to let me copy!
But then it wouldn't let me cd to system/app. It let me cd to system, but not to app. Weird... I booted back up and there's no evidence of the "copied" apk, anywhere.
What...
the...
****.
Thanks to all for your patience with my super-noobish ass, I'm hoping you're not as frustrated with me as I am with this.

When you're in the recovery, your system isn't mounted. You need to mount it first.
Use almost the same command as for remount, but leave out the "remount" option. Just "-o rw".
Your copy went to void.

Jack_R1 said:
When you're in the recovery, your system isn't mounted. You need to mount it first.
Use almost the same command as for remount, but leave out the "remount" option. Just "-o rw".
Your copy went to void.
Click to expand...
Click to collapse
lol, awesome, thanks. I'll fiddle with it some more in the morning.
Why isn't there a link somewhere to a simple instruction manual? It would be so much easier if I could read up on this myself without bugging all of you guys.

Of course there is. My sig has it in bold, and you can find everything there. It's just that people tend to rush asking questions instead of reading

Jack_R1 said:
Of course there is. My sig has it in bold, and you can find everything there. It's just that people tend to rush asking questions instead of reading
Click to expand...
Click to collapse
I've seen a couple of the basic noob guides to adb and I've seen the google definition of adb functions but it doesn't include instructions on how to do the stuff you're walking me through.
Will take a look at those links shortly. Btw, I'm on a MT3G though I don't think that makes a difference at this level.

Related

Rooted Hero Fails adb remount, can't move files from SD

I rooted my hero last night and tried out a few different ROMs but eventually decided to revert to stock and make some manual changes. I used nandroid to restore to just after the root (1.56.651.2). I was able to remove some apps using adb, but the adb remount command fails (permission denied), and I'm unable to push a new bootscreen on to the phone. I also tried a Root File Manager and pre-kitchen as alternatives for the bootscreen, and neither one works. The Root Manager won't paste the files from SD into /system/media/ and pre-kitchen just reboots the phone.
Any suggestions?
Any chance this has something to do with downloading only up to SDK Platform 1.5? I'm at a total loss. I RUU'd my phone, did a clean root at startup using adb shell, and I still have the same problem. The adb remount command won't work, and I can't push anything into the system directory. For what it's worth, when I still had Root Manager installed I was able to toggle RO R/W in any directory with no problem, and I could move files around within the ROM... but I couldn't move anything into it from the SD. I'm new at this, so I have no idea what the problem might be. Anyone else had this problem or have any suggestions?
If anyone else runs into this problem, this solution worked for me:
adb shell
# su
# mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
# chmod 777 /system (Or any subdirectory you want to push to inside system)
# exit
adb push <local file> <device location>
Restore modified permissions when done.
Though I'm still not sure why this is necessary in place of adb remount.
I'm pretty sure the adb remount command will not work on the stock rom. You should be able to do it with just this command instead:
mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system
dametzg said:
I'm pretty sure the adb remount command will not work on the stock rom. You should be able to do it with just this command instead:
mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system
Click to expand...
Click to collapse
Thanks... didn't realize stock wouldn't accept adb remount. If I use the above line from within shell, that doesn't help me push anything on to the phone though... so I needed to enable global permission and then do the push. Oddly enough I tried the same approach last night using Root Manager, and the transfer from SD still failed, even after I applied 777 to the dir I was trying to modify. The current solution may be kind of tedious, but at least it works.
you really shouldn't do 777 on your filesystem, ANY app can then write to your system, overwrite things, or install malicious code. Just remount manually and you should be able to push anything you want, just remember that w/ the stock rom you also don't get a full busybox either.
I'm not positive, but I would think after you remount, you should be able to "adb push" to /system. I suppose it might be specific to that shell, but I would think not.
You just may have to do it once each time you boot your phone.
Edit - err nevermind... you're having permission errors.... um... change adbd on the phone to run as root? not sure how off the top of my head...

Problems with adb push

I am running custom rom Rooted 2.1 v0.3.
Ever since flashing to the custom rom, when i try to push a file, such as:
adb push bootanimation.zip /system/media
I get the error:
Failed to copy.... Read-only file system.
I didn't have this error before flashing to the rom. Does this have something to do with superuser whitelist?
I have tired:
mount -oremount,rw /dev/block/mtdblock3 /system
and it didn't work and I tired:
adb remount
winch returned:
Operation not permitted.
This is ticking me off since I didn't have this problem until flashing the rom.
EDIT: Now if I try:
adb push bootanimation.zip /system/media,
I get:
Permission denied.
This is crazy.
I need help also. Rooting for first time and trying to get recovery.img on and keep getting read only errors. Tried remount to no avail. Help please
su
mount -o rw,remount /Dev/block/mtdblock3 /system
file system is case sensitive!
if anyone know what command to execute an install or push of "any.apk" via Android Terminal Emulator. It would help me greatly.
p.s.
make sure you have developer mode enabled "settings" and accept su permissions. Also have BusyBox
fKngFtd said:
su
mount -o rw,remount /Dev/block/mtdblock3 /system
file system is case sensitive!
if anyone know what command to execute an install or push of "any.apk" via Android Terminal Emulator. It would help me greatly.
p.s.
make sure you have developer mode enabled "settings" and accept su permissions. Also have BusyBox
Click to expand...
Click to collapse
...it's a lowercase d in dev.
mount -o rw,remount /dev/block/mtdblock3 /system
n2imagination said:
I need help also. Rooting for first time and trying to get recovery.img on and keep getting read only errors. Tried remount to no avail. Help please
Click to expand...
Click to collapse
I had the same problem. From what I could tell, I had the wrong ADB driver somehow. So I downloaded the drivers from the HTC website and went to device manager (Win7) and updated the driver software which fixed the problem. But I think i just lucked out when i stumbled onto that, I feel a blind retard with epilepsy trying to draw a circle on an etch-a-sketch when I'm doing things like rooting. But, it couldn't hurt to try it.
fKngFtd said:
su
if anyone know what command to execute an install or push of "any.apk" via Android Terminal Emulator. It would help me greatly.
Click to expand...
Click to collapse
adb install -l whatever.apk (from tools dir in sdk)
`mods said:
I am running custom rom Rooted 2.1 v0.3.
Ever since flashing to the custom rom, when i try to push a file, such as:
adb push bootanimation.zip /system/media
I get the error:
Failed to copy.... Read-only file system.
I didn't have this error before flashing to the rom. Does this have something to do with superuser whitelist?
I have tired:
mount -oremount,rw /dev/block/mtdblock3 /system
and it didn't work and I tired:
adb remount
winch returned:
Operation not permitted.
This is ticking me off since I didn't have this problem until flashing the rom.
EDIT: Now if I try:
adb push bootanimation.zip /system/media,
I get:
Permission denied.
This is crazy.
Click to expand...
Click to collapse
Did you ever get this fixed? I have the same problem!
I have the same problem also. I've been using SDK just fine for over a month or two, and now that I'm on V3, no worky. Somethings obviously going on. But what?!
LexusBrian400 said:
I have the same problem also. I've been using SDK just fine for over a month or two, and now that I'm on V3, no worky. Somethings obviously going on. But what?!
Click to expand...
Click to collapse
I think the proper permissions were not set for this ROM. Hopefully jcase can modify the file and re-upload the ROM =)
at least that's what I've gathered... someone PLEASE correct me if I'm wrong
edit: I looked at the script file and it seems like rw permissions are set properly???
jcase - any insight?
I personally get a bunch of "Out of memory" errors when trying to follow the recovery walk-through.
post baleeted

[Q] 1st update froyo

should i flash it. i dont have root
WOW! i cant believe no one has replied to you.
if you take a look at the first post with the topic
[ROM] Official AOSP 2.2 OTA
but you mentioned you dont have root. so try installing alogcat from the marketplace and capture the whole deal. then you can email directly from the app.
logcat isnt going to do much, it prefetches the files, need to pull the update.zip from adb
ok, so i havnt gotten the notice yet.
but need a bit of help prepping for when i do.
i have the android sdk installed on my desktop, and can create a virtual device etc...
but when i open the cmd prompt and try to run adb devices it says it is populating a list but i see no results or no file created.
so i tried just running adb logcat and it stops at waiting for device.
any pointers. im running win7x64 ultimate
well, i screwed it up. i removed the usb drivers and set it to debugging mode and got it working.
so i am able to run adb shell etc...
once i get the notice ill be ready to do an adb pull
adb shell
su
cd /cache/
ls
adb pull /cache/<package_name>.zip .
sepiid said:
well, i screwed it up. i removed the usb drivers and set it to debugging mode and got it working.
so i am able to run adb shell etc...
once i get the notice ill be ready to do an adb pull
adb shell
su
cd /cache/
ls
adb pull /cache/<package_name>.zip .
Click to expand...
Click to collapse
but how do you know the new radio and spl update name?
you should get that by running su then "cd /cache/ ; ls"
right now i have
download-1.apk
downloadfile.apk
recovery
lost+found
so after it is precached i run that "cd cache/ ; ls" i should have another file or two in there
that would be the file you run adb pull /cache/*.*
a tad bit of help, as a test i am trying to do
adb pull cache/downloadfile.apk d:\
but i get
remote object 'cache/downloadfile.apk' does not exist
i also tried adb pull /cache/downloadfile.apk d:\
and get the same.
edit:
tried doing a adb push
D:\android-sdk-windows\tools>adb push d:\test.txt /cache
failed to copy 'd:\test.txt' to '/cache/test.txt': Permission denied
so i dont have permission to put anything there, which means i likely dont have permission to pull from there
D:\android-sdk-windows\tools>adb pull /cache/downloadfile.apk d:\
remote object '/cache/downloadfile.apk' does not exist
so i opened another cmd prompt and and did an adb shell
su
and i am su
so while the other window was open and i was su i tried the same commands again and got the same results.
edit2:
D:\android-sdk-windows\tools>adb shell ls /cache
opendir failed, Permission denied
so it is definately a su/permissions issue.
Are you rooted? If not use Universal Androot.
*anticipation*
sepiid said:
a tad bit of help, as a test i am trying to do
adb pull cache/downloadfile.apk d:\
but i get
remote object 'cache/downloadfile.apk' does not exist
i also tried adb pull /cache/downloadfile.apk d:\
and get the same.
edit:
tried doing a adb push
D:\android-sdk-windows\tools>adb push d:\test.txt /cache
failed to copy 'd:\test.txt' to '/cache/test.txt': Permission denied
so i dont have permission to put anything there, which means i likely dont have permission to pull from there
D:\android-sdk-windows\tools>adb pull /cache/downloadfile.apk d:\
remote object '/cache/downloadfile.apk' does not exist
so i opened another cmd prompt and and did an adb shell
su
and i am su
so while the other window was open and i was su i tried the same commands again and got the same results.
edit2:
D:\android-sdk-windows\tools>adb shell ls /cache
opendir failed, Permission denied
so it is definately a su/permissions issue.
Click to expand...
Click to collapse
Here do this:
First if you have root, open up terminal or cmd prompt if you are on windows:
adb shell
su
mount -o rw,remount yaffs2 /cache
chmod 777 /cache
that will change the permissions allowing for read and write.
Now exit out of shell and just adb pull /cache/
That will pull everything out of the cache partition.
BAM!!! perfect!
i new it was permissions related. just couldnt figure out the "mount -o rw,remount yaffs2 /cache" part. might i ask you to break that down for me? at least the yaffs2 part.
thanks!
so once the update hits i am ready to grab the files.
callmeradical said:
Here do this:
First if you have root, open up terminal or cmd prompt if you are on windows:
adb shell
su
mount -o rw,remount yaffs2 /cache
chmod 777 /cache
that will change the permissions allowing for read and write.
Now exit out of shell and just adb pull /cache/
That will pull everything out of the cache partition.
Click to expand...
Click to collapse
So the YAFFS2 part of the code I put up there is designating the file system in which we are reading/writing.
YAFFS2 is the most popular and widely used format for flash memory.
please allow me.
yaffs2 is a filesystem type. /cache is of course the directory. -o is for option.
rw: read/write
remount: remount /cache again with new option.
sepiid said:
BAM!!! perfect!
i new it was permissions related. just couldnt figure out the "mount -o rw,remount yaffs2 /cache" part. might i ask you to break that down for me? at least the yaffs2 part.
thanks!
so once the update hits i am ready to grab the files.
Click to expand...
Click to collapse
Oh yeah and BTW, you can change the permissions back if you want after your done, otherwise I believe you can just reboot the phone and it fixes it, not entirely sure, I was trying to rewrite my default.prop to get adb remount to work with stock 1.6 rooted, but I am getting and access denied issue.
perfect was about to ask what the -o was but i tried mount --help and mount -h both resulted in nothing. then you reply sharpt71
thanks again all.
i am now ready to pull the update and upload once i get the update. hopefully soon!
Rather than the remounting and chmoding so you can adb pull.
You could probably get away with
Code:
su
cp /cache/<whatever> /sdcard
Then mount the SD card or put it in a card reader.
SilverSurfR said:
Rather than the remounting and chmoding so you can adb pull.
You could probably get away with
Code:
su
cp /cache/<whatever> /sdcard
Then mount the SD card or put it in a card reader.
Click to expand...
Click to collapse
You probably could I just know that this is a sure fire way to grab everything in cache directly to the machine, otherwise if you aren't next to a machine you could probably do a copy like you said.
My 2nd update failed, do you guys think the files are still in my cache?

[Q] Framework changes with ADB

First of I had no idea where to post this as it's not "device specific"
I'd been undertaking framewokr-res changes fine up until yesterday when I started to recieve an Invalid Argument error in ADB shell.
The command that I am using with ADB is;
su
stop
cp /sdcard/framework-res.apk /system/framework/framework-res.apk
chmod644 /system/framework/framework-res.apk
sync
start
Click to expand...
Click to collapse
But after "cp /sdcard/framework-res.apk /system/framework/framework-res.apk" I'm now recieving, "cannot remove /system/framework/framework-res.apk Invalid Argument"
Where's that come from, I've never had it before, any ideas please?
I'm no noob btw, I've searched google and the forums here to no avail.
Regards.
SWFlyerUK said:
First of I had no idea where to post this as it's not "device specific"
I'd been undertaking framewokr-res changes fine up until yesterday when I started to recieve an Invalid Argument error in ADB shell.
The command that I am using with ADB is;
But after "cp /sdcard/framework-res.apk /system/framework/framework-res.apk" I'm now recieving, "cannot remove /system/framework/framework-res.apk Invalid Argument"
Where's that come from, I've never had it before, any ideas please?
I'm no noob btw, I've searched google and the forums here to no avail.
Regards.
Click to expand...
Click to collapse
My first guess is that the system partition is mounted read-only, but that seems like an odd message.
Is this on a different device than you normally use, or one that has worked before in the past?
Yep just that device, just tried on my Nexus S and it's still working on, but not on my Archos 70. Is there anyway I can mount as r/w with ADB to ensure its read and write?
Thanks for the response, appreciated.
SWFlyerUK said:
Yep just that device, just tried on my Nexus S and it's still working on, but not on my Archos 70. Is there anyway I can mount as r/w with ADB to ensure its read and write?
Thanks for the response, appreciated.
Click to expand...
Click to collapse
I don't know anything about the device, but if it is rooted, busybox mount has a remount option:
Code:
busybox mount -o remount,rw /system
Sorry where do I enter that, just the CMD in the Android SDK? I've not used Busy Box commands before.
on the command line just like your other commands above.
I'm doing something wrong as this is what I'm getting;
No, as part of the commands you are running on the device via adb shell:
Code:
su
stop
[COLOR="Red"]busybox mount -o remount,rw /system[/COLOR]
cp /sdcard/framework-res.apk /system/framework/framework-res.apk
chmod644 /system/framework/framework-res.apk
sync
start
Yet another error;
mount: can't find /system in /proc/mounts
May aswell give up at this rate
Apparently that device uses some other mounting format that standard android.
Ok cheers, champ, I'm sure I'll find a solution, like I said, it worked before, but after a full reformat last night thats no the error that I'm getting.

[Q] Need help pushing a system file with adb

I have bricked my device when I tried to copy framework-res.apk to the system folder. I renamed the old framework-res.apk to framework-res.apk.bak but before I could paste the new one the phone freaked out and rebooted and now I'm stuck at the ATT white screen. I have adb access though so I'm hoping I can just push the framework-res file using adb. Every time I try this though I get an error saying file system is read only. I know all I probably need to do is get the computer to mount system as read/write. I just don't know how to do this. Is there anyone out there who can help me out?
Modified from:
http://forum.xda-developers.com/showthread.php?p=41339365
You may need to do:
mount -o remount,rw /system
chmod 777 /system/framework
Thank you for your quick reply. I'm kind of a novice when it comes to adb so bear with me, but when I use those commands I get 'mount' is not recognized as an internal or external command. I'm not sure if it matters or not but I'm running windows XP and my working directory is in c:\android-sdk\platform-tools when I tried executing "mount -o remount,rw /system".
Okay I tried changing the command to "adb shell mount -o remount,rw /system" now I get the error mount operation not permitted. I hope this doesn't mean I borked it. . . Also want to note that I did root the phone.
jack_slapped said:
Thank you for your quick reply. I'm kind of a novice when it comes to adb so bear with me, but when I use those commands I get 'mount' is not recognized as an internal or external command. I'm not sure if it matters or not but I'm running windows XP and my working directory is in c:\android-sdk\platform-tools when I tried executing "mount -o remount,rw /system".
Click to expand...
Click to collapse
You need to do some reading before you go any further - please. ADB is a command shell, and the commands he gave you are for running IN ADB after it's successfully connected to the phone.
There are lots of good writeups on using ADB all over the place.
jack_slapped said:
Okay I tried changing the command to "adb shell mount -o remount,rw /system" now I get the error mount operation not permitted. I hope this doesn't mean I borked it. . . Also want to note that I did root the phone.
Click to expand...
Click to collapse
You need to get INTO the shell first -- then execute the commands.
Also, always stop the system before modifying stuff, especially framework!
like so:
Code:
> [B]adb shell[/B]
$ [B]su[/B]
# [B]mount -o rw,remount /system[/B]
# [B]stop[/B]
# **[I]cp or mv whatever here[/I]**
# [B]reboot[/B]
your cmd prompt will return after reboot
alacrify said:
You need to do some reading before you go any further - please. ADB is a command shell, and the commands he gave you are for running IN ADB after it's successfully connected to the phone.
There are lots of good writeups on using ADB all over the place.
Click to expand...
Click to collapse
I know believe me when I say I'm trying to read as much as I possibly can. Nobody wants this phone fixed more than me. It's just alot of new stuff and I'm not entirely familiar with it. I think I'm connected with adb and started a shell using "adb -s myserial shell". I input the first command and got "mount: operation not permitted". Not really sure why it would say that considering I rooted the device.
jack_slapped said:
I know believe me when I say I'm trying to read as much as I possibly can. Nobody wants this phone fixed more than me. It's just alot of new stuff and I'm not entirely familiar with it. I think I'm connected with adb and started a shell using "adb -s myserial shell". I input the first command and got "mount: operation not permitted". Not really sure why it would say that considering I rooted the device.
Click to expand...
Click to collapse
Be sure to follow gwbard's directions a little closer. The first command inside the ADB shell is "su" which will elevate you to root - this will be necessary in order to execute the "mount" command.
From your command line (assuming in Windows), you'll run the "adb shell" command that gwbard showed. It should give you a prompt that ends with a dollar sign. Once you execute the "su" command, you'll see that change to a pound/hash sign (#).
gwbard said:
You need to get INTO the shell first -- then execute the commands.
Also, always stop the system before modifying stuff, especially framework!
like so:
Code:
> [B]adb shell[/B]
$ [B]su[/B]
# [B]mount -o rw,remount /system[/B]
# [B]stop[/B]
# **[I]cp or mv whatever here[/I]**
# [B]reboot[/B]
your cmd prompt will return after reboot
Click to expand...
Click to collapse
Dude you are the man! That did the trick. I really appreciate it. I'm still trying to figure out exactly what a shell is and how that ties into adb but I learned a good bit about it from today. I've used linux before and I have heard of a shell but never really understood what exactly it was. Anyways thanks again for everyone who helped me get this working.
Aou said:
Be sure to follow gwbard's directions a little closer. The first command inside the ADB shell is "su" which will elevate you to root - this will be necessary in order to execute the "mount" command.
From your command line (assuming in Windows), you'll run the "adb shell" command that gwbard showed. It should give you a prompt that ends with a dollar sign. Once you execute the "su" command, you'll see that change to a pound/hash sign (#).
Click to expand...
Click to collapse
Yea I posted that last one before I saw his instructions. They were right on point. Thanks guys!
jack_slapped said:
Dude you are the man! That did the trick. I really appreciate it. I'm still trying to figure out exactly what a shell is and how that ties into adb but I learned a good bit about it from today. I've used linux before and I have heard of a shell but never really understood what exactly it was. Anyways thanks again for everyone who helped me get this working.
Click to expand...
Click to collapse
When you click "start" and type "cmd", you're starting a shell. They're command interpreters that extend functionality in specific ways. like "dir" for the Windows/DOS command shell, and "su" or "mount" for adb. Lots of good writeups on that around too

Categories

Resources