I usually use a point buy. Random can be a pain if the player already has a specific character concept--which is most often the case in modern D&D, unlike really old school where you didn't really even think about it until after you rolled. "Str 4, Int 16. Looks like wizard is my best option." Since most people don't play that way, random rolls are counterproductive to most styles.
However, sometimes it can be fun to do random generation. For those situations, I have a system that creates different but equal ability score arrays.
System 1
(Ignore point buys. When I mention "points" in context of this system I mean raw absolute numbers. A Strength 15 is 15 "points.")
1. Decide a total number of "points" you want everyone's character to add up to. If you wanted an average of all 12s, for instance, that is 72 points. Pick a normal rolling method the comes close to the values you want. 4d6 is a good choice most of the time, or 5d6 if you choose a really high point value.
2. Each player rolls and records ability scores (don't assign them to abilities yet, but do make sure you have them written down in some sort of noticeable order), and also adds them up to see what the total comes to.
3. If your total is higher or lower than the target point value, you adjust it up or down until it hits the point value, using the following random method.
a) Roll 1d6, the result tells you which of your rolled scores to modify
b) Roll 1d6 again. Add or subtract (based on whether you have too many or too few points) the result from the score you are modifying. You can't go over 18 or below 3. Any points that would do so are lost. You also can't raise or lower your overall point total beyond that needed to reach the target point value.
c) If you still have too many points, repeat b) until they reach the target value.
4. Assign scores to abilities as desired.
That sounds complex, but it's actually rather simple. Here's an example run:
Let's say I want scores to average out to our 5e standard point buy. I add up 15, 14, 13, 12, 10, 8 for a total value of 72. That's supposed to be pretty close to a 4d6 (drop lowest) method, so I'll roll 4d6 and see what I get.
13, 11, 10, 9, 14, 11 = 68
That's 4 points less than the target of 72, so we'll equalize it.
I roll a d6 and get 2. Then I roll again and get 4. So I target the second number (an 11) and raise it by 4 points, to 15. My finished array is 15, 14, 13, 11, 10, 9 = 72 points.
Let's do it again (it's fun!):
15, 13, 18, 12, 15, 11 = 84
I'm 12 points high (hope I can keep that 18!)
I roll a d6 and get 1, then 3. I drop the first score by 3 points, changing it to 12.
I hit 'em again. Drop 2 points off of my sixth score = 9.
This time it's 6 off of 6 = 3.
Now I only have 1 point left to take off, and I roll a 5. I don't have to roll for a value to subtract, as I can only take 1 point off, putting it at 14.
My final array is 18, 14, 13, 12, 12, 3 = 72. I've got both an 18 and a 3--how much more old school can you get?
A couple more times:
9, 17, 16, 11, 16, 12 = 81
Adjusted: 16, 16, 16, 11, 10, 3 = 72
11, 11, 14, 16, 15, 13 = 80
Adjusted: 16, 14, 13, 11, 10, 8 = 72
If the potential for really low scores is a concern, you can either use a lower rolling method (stick with 3d6 for example) or use a d4 to modify stats instead of a d6.
I have another system also.
System 2
My other system is more traditional, but it doesn't create equal scores. Just allow each player to roll for scores, and if they don't like what they get they can use point buy. Optionally, allow whoever rolled the lowest results to opt to use the results of the person who rolled the lowest array that they chose to keep (rather than choosing point buy). This guarantees that no one player can have the worst random results.